我是一位经验丰富的 DBA,对 Laravel 不是很熟悉。我的主要开发人员在 Laravel 方面经验丰富,但是,倾向于掩盖数据库细节。手头的问题是我们一直在使用工匠使用“迁移”和“播种者”。这在开发环境中运行得相对较好(有一些小问题)。我们的产品现已推出初始版本,现已投入生产。关注点:
开发人员创建了许多迁移,我对这些迁移在生产中的陷阱知之甚少。例如:他编写的大多数迁移都有 up() 和没有 down()。由于系统很小,通常的做法是每次都重置整个数据库并重新加载所有迁移和播种器 - 显然我们不能在生产环境中这样做,所以我担心只运行“laravel migrate”系统充满了实时数据。
类似的问题,我们的大多数播种机都以“delete()”开始,基本上在运行之前删除表中的所有数据,我对在生产环境中运行 db:seed 以及我们目前拥有的文件没有任何兴趣。
我在他使用的系统中看不到任何东西可以区分生产环境和其他环境,所以我们不做诸如删除表之类的事情。
我设置数据库的正常方式是有一个“受限”的应用程序用户,即应用程序数据库用户没有创建/删除表的权限,只能插入和删除,防止意外删除表。看来我必须拥有完整的数据库权限才能运行迁移和播种程序,并且相同的数据库连接文件(和嵌入式用户名/密码)用于应用程序和模式生成,我宁愿拥有出于安全原因,一个 DBA 用户和一个 APP 用户。
我们的模式相对简单,只有大约 30 个表,而且我很容易管理它,特别是因为 laravel 的模式构建器不支持许多 postgres 功能(json 数据类型、全文索引等),而且我们'不断地执行 db::raw() 命令来创建我们的索引,初始设置我们的序列值等。
因此,将其归结为一个问题:我是否遗漏了一些东西 re:mifrations(从 DBA 的角度来看如何在生产环境中使用迁移/播种器的文档),还是我应该自己使用 .sql 文件管理架构?我在网上看到的大多数例子都掩盖了这样的生产问题,我不愿意让我的数据处于危险之中。