我有一个Play框架驱动的应用程序,其中数据库作为持久层(为此我使用了Slick)。我启用了演进功能,生成了1.sql
文件,并成功将其推出了生产环境。
客户端请求需要修改数据库架构的新功能-即。添加新表,添加新列以及更改现有列的可空性。
一旦更新了Slick的所有Table定义和相关代码,我将再次生成模式并将其放置为2.sql
。正确要求运行Evolution,但是...生成的Evolution并不反映1.sql状态之上的增量更新,而是说明如何从头开始创建数据库模式的说明(即CREATE TABLE和所有列,包括新列)而不是“添加列”案例。
是否有可能实现增量更新,这样我就可以轻松地在生产环境中运行它以将数据库从版本1升级到版本2(#1和#2之间的SQL“ diff”),或者我必须手动进行创造那些进化?
答案 0 :(得分:1)
在v1之后,您必须手动创建这些演变。
对于我们的产品,我们在产品进行装运前开发时保持“生成演变”的状态。准备好部署v1后,我们将关闭自动演进的生成,并从手动演进开始。
虽然这可能不是最佳选择,但作为一个团队,我们更愿意知道人类正在编码和检查DDL(有时是DML)SQL语句以进行演化,而不是使用自动化脚本来决定应该删除表并重新创建。在某些产品中,我们在持续改进和适应的过程中拥有数百年的evos。该系统运行良好。
答案 1 :(得分: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 ,就像在我的示例中一样。