2017-02-23 10 views
0

私はliquibaseを使用してpostgressqlデータベースのトリガーを作成しています。以下は、私がLiquiBaseをliquibase postgresql作成関数

<?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-3.1.xsd"> 

    <changeSet id="1" author="yc14ik1"> 

     <createProcedure catalogName="cat" dbms="postgresql" 
      encoding="utf8" procedureName="UPDATE_LAST_ROW_CHG_TS()" relativeToChangelogFile="true" schemaName="sub"> 

      CREATE OR REPLACE FUNCTION UPDATE_LAST_ROW_CHG_TS() RETURNS trigger 
      LANGUAGE plpgsql 
      AS $$ 
      BEGIN 
       NEW.LAST_ROW_CHG_TS = NOW(); 
       RETURN NEW; 
      END; 
      $$; 

     </createProcedure> 


     <sql></sql> 
</changeSet> 

で使用する構文は、この手順は、ジェンキンスジョブで実行されたとき、私は

Unexpected error running Liquibase: ERROR: language "plpgsql" does not exist 
    Hint: Use CREATE LANGUAGE to load the language into the database. [Failed SQL: CREATE OR REPLACE FUNCTION UPDATE_LAST_ROW_CHG_TS() RETURNS trigger 
      LANGUAGE plpgsql 
      AS $$ 
      BEGIN 
       NEW.LAST_ROW_CHG_TS = NOW(); 
       RETURN NEW; 
      END; 
      $$;] 


Build step 'Execute shell' marked build as failure 
Notifying upstream projects of job completion 
Warning: you have no plugins providing access control for builds, so falling back to legacy behavior of permitting any downstream builds to be triggered 

このエラーを取得するには、いくつかのいずれかが、私はこの問題を解決することができますどのように私を助けることはできますか?

答えて

0

私は別の方法で設定しても問題ありません。

<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.1.xsd 
     http://www.liquibase.org/xml/ns/dbchangelog-ext http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-ext.xsd"> 
     <changeSet author="l" id="UPDATE_LAST_ROW_CHG_TS" runOnChange="true"> 
       <createProcedure catalogName="UPDATE_LAST_ROW_CHG_TS" 
         dbms="postgresql" 
         encoding="utf8" 
         path="../files/UPDATE_LAST_ROW_CHG_TS.sql" 
         procedureName="UPDATE_LAST_ROW_CHG_TS" 
         relativeToChangelogFile="true" 
         schemaName="public"></createProcedure> 
     </changeSet> 
</databaseChangeLog> 

そこからすべてのsqlをpath属性で参照されている.sqlファイル内に置きます。

あなたのやり方がうまくいかないことは知っていませんが、あなたが底に向かって空のタグを持っていることは私には奇妙なようです。たぶん、あなたのSQL関数をラップするそれらのために意味ですか?

私は、liquibaseが設定され、正しく実行されていれば上記の例がうまくいくことを知っています。