liquibase中的Postgres Dropping函数显示错误

时间:2017-10-13 11:52:09

标签: postgresql function liquibase

我在xml文件中有FUNCTION,如:

<?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"
        xmlns:ext="http://www.liquibase.org/xml/ns/dbchangelog-ext"
        xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.0.xsd
        http://www.liquibase.org/xml/ns/dbchangelog-ext http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-ext.xsd">

    <changeSet id="1.0-procedures" author="api-manager">

        <sql>
            DROP FUNCTION IF EXISTS proc_api_consumer_audit_insert;
        </sql>

        <createProcedure>
            CREATE FUNCTION proc_api_consumer_audit_insert()
            RETURNS TRIGGER AS $api_consumer_audit$
            BEGIN
                INSERT INTO api_consumer_audit(LOREM_IPSUM) VALUES(LOREM_IPSUM);
                RETURN NEW;
            END;
            $$ LANGUAGE plpgsql;
        </createProcedure>

        <rollback>
            DROP FUNCTION IF EXISTS proc_api_consumer_audit_insert;
        </rollback>
    </changeSet>
</databaseChangeLog>

更新期间的liquibase显示以下错误:

[ERROR] Failed to execute goal org.liquibase:liquibase-maven-plugin:3.5.3:update (default-cli) on project api-manager: Error setting up or running Liquibase: Migration failed for change set db/dev/changelog/1.0/1.0-procedures.xml::1.0-procedures::api-manager:
[ERROR] Reason: liquibase.exception.DatabaseException: ERROR: syntax error at end of input
[ERROR] Pozycja: 55 [Failed SQL: DROP FUNCTION IF EXISTS proc_api_consumer_audit_insert]
[ERROR] -> [Help 1]
[ERROR] 
[ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.
[ERROR] Re-run Maven using the -X switch to enable full debug logging.
[ERROR] 
[ERROR] For more information about the errors and possible solutions, please read the following articles:
[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/MojoExecutionException

Process finished with exit code 1

我无法解决此错误日志。我该怎么修这个?

1 个答案:

答案 0 :(得分:2)

要删除某个功能,您需要指定包含参数签名的功能。如果函数没有参数,则需要使用()

DROP FUNCTION IF EXISTS proc_api_consumer_audit_insert();

这在Postgres 10中已经放宽了。如果函数没有重载(所以只有一个参数签名),你可以省略参数列表。因此,在Postgres 10中,您的陈述无需更改即可生效