Comment puis-je créer des déclencheurs pour un postgreSQL db à l'aide de liquibase?

Je suis en utilisant le dropwizrd-migrations module pour liquibase db refactoring. Voir le guide ici: http://dropwizard.codahale.com/manual/migrations/

Quand je le lance
java-jar my_project.jar db migrer my_project.yml

J'obtiens l'erreur suivante:

ERREUR [2013-09-11 20:53:43,089] liquibase: Changement des migrations.xml::11::m'a échoué. Erreur: Erreur d'exécution SQL CREATE or replace TRIGGER add_current_date_to_my_table AVANT la mise à JOUR SUR ma_table POUR CHAQUE LIGNE EXÉCUTER la PROCÉDURE change_update_time();: ERREUR: erreur de syntaxe sur ou près de "DÉCLENCHER"
Position: 19

Voici quelques révisions de mon migrations.xml fichier:

<changeSet id="1" author="me">
    <createProcedure>
        CREATE OR REPLACE FUNCTION change_update_time() RETURNS trigger
        LANGUAGE plpgsql
        AS $$
        BEGIN
        NEW.updated_at := CURRENT_TIMESTAMP;
        RETURN NEW;
        END;
        $$;
    </createProcedure>
    <rollback>
        DROP FUNCTION change_update_time();
    </rollback>
</changeSet>        

<changeSet id="2" author="me">
    <preConditions>
        <not>
            <tableExists tableName="my_table"/>
        </not>
    </preConditions>

    <createTable tableName="my_table">
        <column name="_id" type="integer" defaultValue="0">
            <constraints nullable="false"/>
        </column>
        <column name="updated_at" type="timestamp without time zone" defaultValue="now()">
            <constraints nullable="false"/>
        </column>
    </createTable>
</changeSet>

<changeSet id="3" author="me">
    <sql splitStatements="false">
        CREATE OR REPLACE TRIGGER add_current_date_to_my_table BEFORE UPDATE ON my_table FOR EACH ROW EXECUTE PROCEDURE change_update_time();
    </sql>
    <rollback>
        DROP TRIGGER add_current_date_to_my_table ON my_table;
    </rollback>
</changeSet>

Est-il possible que je peux créer le déclencheur add_current_date_to_my_table? Est-ce redondant avec la "les RETOURS de déclenchement" de la création de la fonction?

Je ne sais pas Postgres à tous, mais ne les procédures stockées travail sur son propre? Le message d'erreur que vous obtenez est de postgres. N' "create or replace trigger"? Rapide googleing montre que le déclencheur peut être chuté de DROP TRIGGER IF EXISTS.... De toute façon. Essayez de créer le déclencher manuellement d'abord et assurez-vous qu'il fonctionne. Liquibase sera juste exécuter le SQL.
Merci, cela a fonctionné.

OriginalL'auteur Ann Kilzer | 2013-09-11