【问题标题】:Liquibase generateChangeLog can't handle the same table name in different schemasLiquibase generateChangeLog 无法处理不同模式中的相同表名
【发布时间】:2021-02-13 00:51:29
【问题描述】:

我正在使用 MSSQL 并评估 Liquibase 以用于迁移。因此,我想使用 generateChangeLog 生成我的第一个变更日志。我的数据库有两个模式:默认模式和另一个名为“blah”的模式。我在每个模式中都有一个具有相同表名的表:test1。我跑了:

liquibase --dataOutputDirectory=./data/ --schemas=blah,dbo --changeLogFile=changelog.mssql.sql --includeSchema=true generateChangeLog

它完成了,我查看了生成的SQL:

-- liquibase formatted sql

-- changeset bmccord2:1604068236633-1
CREATE TABLE blah.test1 (id int NOT NULL, name varchar(255), CONSTRAINT PK__test1__3213E83F4F883C7C PRIMARY KEY (id));

-- changeset bmccord2:1604068236633-2
INSERT INTO blah.test1 (id, name) VALUES (1, 'Brian'),(2, 'Kim');;

-- changeset bmccord2:1604068236633-3
CREATE TABLE dbo.test1 (id int NOT NULL, name varchar(255), CONSTRAINT PK__test1__3213E83F6FD50901 PRIMARY KEY (id));

-- changeset bmccord2:1604068236633-4
INSERT INTO dbo.test1 (id, name) VALUES (1, 'Brian'),(2, 'Kim');;

起初,它看起来不错,但后来我注意到插入到 blah.test1 表中的数据不是该表中实际存在的数据。该表中的数据是:

"id","name"
"1","Miranda"
"2","Kyle"

因此,它对两个表都使用了第二个表的数据。它也只在数据文件夹中生成一个 .csv 文件。

显然,这不是我真正的数据库。我将问题简化为导致问题的最小因素。

有什么办法可以让它正常工作吗?

【问题讨论】:

    标签: sql-server liquibase


    【解决方案1】:

    查看他们的forum,他们声明:

    Liquibase 的设计方式,一次只能使用一个模式。

    如果它适合您的用例,您可以尝试定义两个单独的迁移并逐个应用它们,例如:

    liquibase --dataOutputDirectory=./data/ --schemas=blah --changeLogFile=changelog.blah.mssql.sql --includeSchema=true generateChangeLog
    liquibase --dataOutputDirectory=./data/ --schemas=dbo --changeLogFile=changelog.dbo.mssql.sql --includeSchema=true generateChangeLog
    

    或者,如果您希望为两个数据库应用完全相同的更改日志,您可以使用相同的 changeLogFile 调用它两次。在这种情况下,只需要调整 --schemas。 (--schemas=dbo--schemas=blah

    【讨论】:

      猜你喜欢
      • 2010-11-17
      • 1970-01-01
      • 2013-12-19
      • 1970-01-01
      • 1970-01-01
      • 2021-03-12
      • 1970-01-01
      • 1970-01-01
      • 2010-09-07
      相关资源
      最近更新 更多