J'ai testé votre code et il fonctionne:
Tout d'abord, nous allons créer la table:
# create table test (x int4, ts timestamptz);
CREATE TABLE
Maintenant, la fonction ajouter:
# CREATE OR REPLACE FUNCTION "public"."update_ts"() RETURNS trigger AS
>> $body$
>> DECLARE
>> BEGIN
>> NEW.ts := now();
>> RETURN NEW;
>> END;
>> $body$
>> LANGUAGE 'plpgsql' VOLATILE CALLED ON NULL INPUT SECURITY INVOKER;
CREATE FUNCTION
Et enfin, ajoutez un déclencheur:
# CREATE TRIGGER "tr_update_ts" BEFORE INSERT OR UPDATE
>> ON "public"."test" FOR EACH ROW
>> EXECUTE PROCEDURE "public"."update_ts"();
CREATE TRIGGER
Donc, maintenant, nous allons tester sur une partie INSERT de celui-ci:
# insert into test (x) values (1);
INSERT 0 1
# select * from test;
x | ts
---+-------------------------------
1 | 2009-09-12 19:54:50.812139+02
(1 row)
Il est clair que cela fonctionne.
Maintenant, la mise à jour:
# update test set x = 2;
UPDATE 1
# select * from test;
x | ts
---+-------------------------------
2 | 2009-09-12 19:54:57.463933+02
(1 row)
ts a été modifiée. Clairement, le code que vous avez montré fonctionne, donc l'erreur doit être ailleurs.
Afficher la sortie "\ d test" de psql, et \ df + de la fonction de déclenchement.
J'ai ajouté la fonction complète ci-dessus .. mais il semble surtout la même – David
J'ai compilé le code que vous avez fourni pour votre fonction, et cela a fonctionné comme prévu pour moi. –
Pouvez-vous faire un \ d et l'afficher? –