我有一个变更集:
<?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更新,我得到:
FUNCTION getLeadSet already exists liquibase.exception.DatabaseException: Error executing SQL ... getLeadSet....
在命令行上。似乎与提及here的问题相同,但我有最新的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>
P.S)Liquibase版本:2.0.5
答案 0 :(得分:0)
您是否在更新之前回滚更改?因为函数getLeadSet已经存在,你可能会得到一个sql错误,而不是一个liquiabase。
答案 1 :(得分:0)
runOnChange =“ true”不起作用,相反,我使用了正在工作的 runAlways =“ true” 。
我决定在项目中使用runAlways =“ true”而不是runOnChange =“ true”,因为在部署期间这对我的项目没有太大影响。
liquibase版本是3.5.1