0

我有一个变更集:

<?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-2.0.xsd">
        <changeSet id="1359722450-38" author="myname" runOnChange="true" >        
           <sqlFile endDelimiter="" splitStatements="false" path="sql/38_getLeadSet.sql" relativeToChangelogFile="true" />
           <rollback>DROP FUNCTION `getLeadSet`</rollback>          
        </changeSet>
</databaseChangeLog>

包含在主日志文件中

我如果在 sql/38_getLeadSet.sql 中更改某事并运行 liquibase update ,我得到:

FUNCTION getLeadSet already exists liquibase.exception.DatabaseException: Error executing SQL ... getLeadSet....

在命令行上。似乎与此处提到的问题相同,但我有最新的 liquibase 版本

任何形式的建议表示赞赏,谢谢

编辑

好吧,我们需要在 sql 文件标记之前删除 sql,例如

 <sql>DROP FUNCTION if exists `getLeadSet`</sql>    
 <sqlFile endDelimiter="" splitStatements="false" path="sql/38_getLeadSet.sql"  relativeToChangelogFile="true" />
 <rollback>DROP FUNCTION `getLeadSet`</rollback>

PS)Liquibase 版本:2.0.5

4

2 回答 2

0

您是否在再次更新之前回滚更改?因为函数 getLeadSet 已经存在,你可能会得到一个 sql 错误而不是 liquiabase 错误。

于 2013-02-13T05:39:36.667 回答
0

runOnChange="true" 不起作用,而是我使用了运行正常runAlways="true"

我决定在我的项目中使用 runAlways="true" 而不是 runOnChange="true",因为这在部署期间对我的项目没有太大影响。

liquibase 版本是 3.5.1

于 2020-02-13T13:33:33.437 回答