Liquibase从更改日志中排除模式名称

时间:2018-02-13 14:23:31

标签: postgresql liquibase

我有一个多租户应用程序。每个租户在数据库中都有自己的架构。所有模式在逻辑上都是相同的,唯一的区别是模式名称(实际模式)。

我希望能够运行更新给定模式的liquibase:update schemaName=my-schema

我的changelogs.xml看起来像这样:

<createTable tableName="myTable" schemaName="${schemaName}">

其中schemaName被参数化,并作为动态属性获得。但是,问题在于databasechangelogdatabasechangeloglock表仅存在于默认模式中,用于打开与数据库的连接。我在liquibase.properties中配置了这个。

liquibase.properties

url: jdbc:postgresql://localhost:5431/my-db?currentSchema=public

现在作为属性中定义的参数和模式给出的模式不匹配,即。作为参数给出的模式没有自己的databasechangelogdatabasechangeloglock,而是在public模式中对这些表进行验证。

错误

Error setting up or running Liquibase: Validation Failed:
[ERROR]      1 change sets check sum
[ERROR]           001-add-table-mytable.xml::001::wesleyy was: 7:fb1f721005e26807efc07bde45f459b9 but is now: 7:0722a27fccf7137a326a1e50685a22fc

看起来schemaName参数更改了checkSum。

有办法:

  1. 以某种方式从校验和中排除schemaName? OR
  2. 在每个给定的databasechangelog上动态生成databasechangeloglockschemaName

1 个答案:

答案 0 :(得分:1)

运行liquibase时,请使用可选参数 &#34; - liquibaseSchemaName = [SCHEMANAME]&#34;

Liquibase将在[schemaName]中创建/使用changelog表,而不是您连接的默认用户。

由于每个架构/租户都拥有自己的更改日志副本,因此架构名称的更改不会导致任何校验和问题。