2017-10-13 77 views
1

FUNCTION像XML文件:的Postgres在liquibase刪除函數顯示錯誤

<?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 

我無法解決此錯誤日誌。我該如何修復?

回答

2

要刪除函數,需要指定包含參數簽名的函數。如果函數沒有參數,你需要使用()

DROP FUNCTION IF EXISTS proc_api_consumer_audit_insert(); 

這在Postgres的10有所放鬆。如果功能不超載(所以只有一個參數簽名),你可以省略該參數列表。因此,在Postgres 10中,您的聲明將無需更改

+0

是的,您是對的....我是盲人 – xross

+0

謝謝您的協助 – xross