我遇到了liquibase变更集的问题。变更集就是这样的:
<changeSet id="recreate-cool-dbobject" author="WTF">
<preConditions onFail="MARK_RAN">
<tableExists tableName="table_a" />
<tableExists tableName="table_b" />
<tableExists tableName="table_c" />
</preConditions>
<comment>…should be executed if Feature X is available</comment>
<sqlFile
path="resources/view-definition-v2.sql"
relativeToChangelogFile="true"
dbms="oracle"
stripComments="false"
endDelimiter="-- /"
/>
<rollback>
<sqlFile
path="resources/view-definition-v1.sql"
relativeToChangelogFile="true"
dbms="oracle"
stripComments="false"
endDelimiter="-- /"
/>
</rollback>
</changeSet>
我完全知道table_a
,table_b
和table_c
确实存在...但仍然一直执行view-definition-v1.sql
,而且我多次检查是否SQL内部链接文件有效。如果我直接发出SQL,它就会毫无怨言地执行。
view-definition-v1.sql
文件中的SQL有点像
CREATE OR REPLACE VIEW view_tab_abc
(
col_a
, col_b
, col_c
, CREATED_AT
, UPDATED_AT
) AS
SELECT a.id AS col_a
, b.id AS col_b
, c.id AS col_c
, a.created_at AS CREATED_AT
, a.updated_at AS UPDATED_AT
FROM tab_a a
JOIN tab_b b on b.id=a.tab_b_id
JOIN tab_c c on c.id=b.tab_c_id
WITH READ ONLY
view-definition-v2.sql
文件中的SQL有点像
CREATE OR REPLACE VIEW view_tab_abc
(
col_a
, col_b
, col_c
, CREATED_AT
, UPDATED_AT
) AS
SELECT a.id AS col_a
, a.tab_b_id AS col_b
, a.tab_c_id AS col_c
, a.created_at AS CREATED_AT
, a.updated_at AS UPDATED_AT
FROM tab_a a
WITH READ ONLY
我已经尝试tableName="table_a"
或tableName="TABLE_A"
了,但它仍然没有工作。我还有其他一些不能显示此问题的变更集。有人有任何线索吗?
二手Liquibase版本为3.4.2,数据库为Oracle 12cR1 StandardEdition1
感谢任何提示和最好的问候, 乙
答案 0 :(得分:0)
一种可能性是,它没有为您的表寻找正确的架构。尝试改变你的前提条件,得到类似的东西:
<tableExists schemaName="my_schema" tableName="table_a" />
每张支票。
另一件事是,如果您使用updateSQL
命令,则使用liquibase
参数始终值得保存生成的SQL并运行它。这样您就可以确定您运行的SQL与Liquibase运行的SQL相同。