我第一次在数据库中使用属性文件中指定的以下参数运行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="db2viewname_changeSet_005.xml"/>
</databaseChangeLog>
viewname_changeSet_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">
<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>
这是因为您的表是用原始SQL创建的。Liquibase没有任何类型的SQL解析器,因此只直接执行SQL。
如果您使用更多的语义标记,如<createTable>
,那么Liquibase将知道如何将默认的schema属性添加到生成的SQL中。
如注释中所述,您可以使用:
<sql>
CREATE TABLE ${database.defaultSchemaName}.STPL_TEST (
ST_ID BIGINT NOT NULL,
ST_VCHAR VARCHAR(10),
ST_DATE DATE
);
</sql>
希望这能帮助下一个人