我有一个多租户应用程序。每个租户在数据库中都有自己的架构。所有模式在逻辑上都是相同的,唯一的区别是模式名称(实际模式)。
我希望能够运行更新给定模式的liquibase:update schemaName=my-schema
。
我的changelogs.xml
看起来像这样:
<createTable tableName="myTable" schemaName="${schemaName}">
其中schemaName
被参数化,并作为动态属性获得。但是,问题在于databasechangelog
和databasechangeloglock
表仅存在于默认模式中,用于打开与数据库的连接。我在liquibase.properties
中配置了这个。
liquibase.properties
url: jdbc:postgresql://localhost:5431/my-db?currentSchema=public
现在作为属性中定义的参数和模式给出的模式不匹配,即。作为参数给出的模式没有自己的databasechangelog
和databasechangeloglock
,而是在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。
有办法:
schemaName
? OR databasechangelog
上动态生成databasechangeloglock
和schemaName
?答案 0 :(得分:1)
运行liquibase时,请使用可选参数 &#34; - liquibaseSchemaName = [SCHEMANAME]&#34;
Liquibase将在[schemaName]中创建/使用changelog表,而不是您连接的默认用户。
由于每个架构/租户都拥有自己的更改日志副本,因此架构名称的更改不会导致任何校验和问题。