0

我有一个以数据库为持久层的 Play 框架驱动的应用程序(为此我使用 Slick)。我已经启用了进化,生成1.sql了文件并成功地将其推广到生产中。

客户请求需要修改数据库架构的新功能 - 即。添加新表、添加新列以及更改现有列的可空性。

更新所有 Slick 的表定义和相关代码后,我会再次生成模式并将其放置为2.sql. 正确地请求运行演进,但是......生成的演进并不反映在 1.sql 状态之上的增量更新,而是说明如何从头开始创建数据库模式(即 CREATE TABLE 包含所有列,包括新列而不是而不是 ADD COLUMN 原因)。

是否可以实现增量更新,以便我可以轻松地在生产中运行它以获取数据库从修订 #1 到修订 #2(SQL“差异”在 #1 和 #2 之间)还是我必须手动创建这些演变?

4

2 回答 2

1

您必须在 v1 之后手动创建这些演变。

对于我们的产品,我们在产品处于出货前开发阶段时将“生成进化”保持打开状态。一旦 v1 准备好部署,我们关闭自动进化生成并开始手动进化。

虽然这可能感觉不是最理想的,但作为一个团队,我们更愿意知道人类正在编码和审查 DDL(有时是 DML)SQL 语句以进行演进,而不是自动脚本决定可能应该删除并重新创建表。在某些产品中,我们有数百个 evos 跨越多年的持续改进和适应。该系统运行良好。

于 2019-01-23T16:04:18.923 回答
0

您只需将差异放入进化脚本中。

例子

1.sql

CREATE TABLE Persons (
    PersonID int,
    LastName varchar(255),
    FirstName varchar(255),
    Address varchar(255),
    City varchar(255) 
);

2.sql

ALTER TABLE Persons ADD Email varchar(255);

现在,你的问题:

我再次生成模式并将其放置为 2.sql

您再次生成它,因此您的文件看起来像

1.sql

CREATE TABLE Persons (
    PersonID int,
    LastName varchar(255),
    FirstName varchar(255),
    Address varchar(255),
    City varchar(255) 
);

2.sql

CREATE TABLE Persons (
    PersonID int,
    LastName varchar(255),
    FirstName varchar(255),
    Address varchar(255),
    City varchar(255) 
);
ALTER TABLE Persons ADD Email varchar(255);

您只需要对2.sql方案进行增量更改,就像在我的示例中一样。

于 2019-01-14T07:57:11.357 回答