提问者:小点点

在sql更新日志中忽略liquibase默认模式


问题:没有在脚本中设置架构,liquibase找不到SQL表。

如何说liquibase使用默认模式在SQL更新日志?

在sql更新日志之前,为了添加检查约束,我创建了所有表,没有设置架构。架构设置在application.properties中,所有表都在$RM_DB_SCHEMA中正确创建。

RM_DB_SCHEMA: MANAGER
RM_DB_URL: "jdbc:h2:file:~/rmdb;MODE=PostgreSQL;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=FALSE;AUTO_SERVER=TRUE;INIT=CREATE SCHEMA IF NOT EXISTS ${RM_DB_SCHEMA}"
RM_DB_USER: sa
RM_DB_PASSWORD: admin
RM_LB_USER: ${RM_DB_USER}
RM_LB_PASSWORD: ${RM_DB_PASSWORD}
spring:
  datasource:
    hikari:
      schema: ${RM_DB_SCHEMA}
      username: ${RM_DB_USER}
      password: ${RM_DB_PASSWORD}
      jdbc-url: ${RM_DB_URL}
  liquibase:
    change-log: "classpath:db/manager-changelog.xml"
    default-schema: ${RM_DB_SCHEMA}
    user: ${RM_LB_USER}
    password: ${RM_LB_PASSWORD}
  jpa:
    database: postgresql

由以下原因引起:liquibase.例外. LiquibaseException:liquibase.例外.MigrationFailedException:更改集的迁移失败changelog.xml::d::d:Reason:liquibase.例外.Database aseException: Таблица "STATUS" не найдена Table"STATUS"未找到;SQL语句:ALTER TABLE TEST ADD CONSTRAINTSTATUS_IDCHECK(存在(SELECT 1从STATUS的WHERESTATUS_ID=s.id))[42102-200][失败SQL:(42102)ALTER TABLE TEST ADD CONSTRAINTSTATUS_IDCHECK(存在(SELECT 1从STATUS的WHERESTATUS_ID=s.id)]


共2个答案

匿名用户

我找到了另一个解决方案。问题是使用h2进行本地开发。(它总是以公共模式初始化)。我只是在创建它后添加SETSCHOMA。

在测试属性:

jdbc-url: 'jdbc:h2:file:~/rmdb;MODE=PostgreSQL;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=FALSE;AUTO_SERVER=TRUE;INIT=CREATE SCHEMA IF NOT EXISTS ${application.database.schema}\;SET SCHEMA ${application.database.schema}'

匿名用户

解决此问题的一个简单方法是使用属性:Database. defaultSchemaName

您可以像这样写入您的sql语句:

<sql>UPDATE ${database.defaultSchemaName}.product SET ...</sql>