Liquibase 液化未使用的默认架构

Liquibase 液化未使用的默认架构,liquibase,Liquibase,我第一次使用属性文件中指定的以下参数在数据库中运行liquibase 属性文件 username: abc driver: com.ibm.db2.jcc.DB2Driver defaultSchemaName: abcrpt databaseChangeLog文件包含一个创建测试表的简单的changeSet。DATABASECHANGELOG和DATABASECHANGELOGLOCK表创建为abcrpt,但测试表创建为abc。我做错了什么?谢谢 databaseChangeLog.xm

我第一次使用属性文件中指定的以下参数在数据库中运行
liquibase

属性文件

username: abc
driver: com.ibm.db2.jcc.DB2Driver
defaultSchemaName: abcrpt  
databaseChangeLog
文件包含一个创建测试表的简单的
changeSet
DATABASECHANGELOG
DATABASECHANGELOGLOCK
表创建为
abcrpt
,但测试表创建为
abc
。我做错了什么?谢谢

databaseChangeLog.xml

<?xml version="1.0" encoding="UTF-8"?> 

<databaseChangeLog
   xmlns="http://www.liquibase.org/xml/ns/dbchangelog"
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog
   http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.1.xsd"> 

   <preConditions>
      <dbms type="DB2"/>
   </preConditions>

   <include file="db2\viewname_changeSet_005.xml"/>

</databaseChangeLog>
<?xml version="1.0" encoding="UTF-8"?> 

<databaseChangeLog
   xmlns="http://www.liquibase.org/xml/ns/dbchangelog"
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog
   http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.1.xsd"> 

   <changeSet id="Drop Table STPL_TEST" author="JoanB">
      <preConditions onFail="CONTINUE">
         <sqlCheck expectedResult="1">SELECT COUNT(*) FROM syscat.tables where tabname = 'STPL_TEST'</sqlCheck>
       </preConditions>
      <sql>
         DROP TABLE STPL_TEST; 
      </sql>
   </changeSet>

   <changeSet id="Create Table STPL_TEST" author="JoanB">
      <sql>
         CREATE TABLE STPL_TEST (
           ST_ID     BIGINT NOT NULL,
           ST_VCHAR  VARCHAR(10),
           ST_DATE   DATE
         );
      </sql>
   </changeSet>

</databaseChangeLog>

viewname\u changeSet\u 005.xml

<?xml version="1.0" encoding="UTF-8"?> 

<databaseChangeLog
   xmlns="http://www.liquibase.org/xml/ns/dbchangelog"
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog
   http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.1.xsd"> 

   <preConditions>
      <dbms type="DB2"/>
   </preConditions>

   <include file="db2\viewname_changeSet_005.xml"/>

</databaseChangeLog>
<?xml version="1.0" encoding="UTF-8"?> 

<databaseChangeLog
   xmlns="http://www.liquibase.org/xml/ns/dbchangelog"
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog
   http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.1.xsd"> 

   <changeSet id="Drop Table STPL_TEST" author="JoanB">
      <preConditions onFail="CONTINUE">
         <sqlCheck expectedResult="1">SELECT COUNT(*) FROM syscat.tables where tabname = 'STPL_TEST'</sqlCheck>
       </preConditions>
      <sql>
         DROP TABLE STPL_TEST; 
      </sql>
   </changeSet>

   <changeSet id="Create Table STPL_TEST" author="JoanB">
      <sql>
         CREATE TABLE STPL_TEST (
           ST_ID     BIGINT NOT NULL,
           ST_VCHAR  VARCHAR(10),
           ST_DATE   DATE
         );
      </sql>
   </changeSet>

</databaseChangeLog>

从syscat.tables中选择COUNT(*),其中tabname='STPL\u TEST'
跌落台STPL_试验;
创建表STPL\U测试(
ST_ID BIGINT不为空,
ST_VCHAR VARCHAR(10),
圣日
);

这是因为您的表是用原始SQL创建的。Liquibase没有任何类型的SQL解析器,因此只直接执行SQL


如果您使用更多的语义标记,如
,那么Liquibase将知道如何将默认模式属性添加到生成的SQL中。

SQL语句中是否有可以使用的预定义属性(包含当前模式)?例如:
create table${LB.SCHEMA}.some_table…
您可以尝试${database.defaultCatalogName}或${database.defaultSchemaName}。我相信DB2不支持两个级别的对象容器,所以liquibase调用DB2模式目录,而${database.defaultCatalogName}是更好的选择。