我測試你的代碼,它的工作原理:
首先,讓我們創建表:
# create table test (x int4, ts timestamptz);
CREATE TABLE
現在,讓我們添加功能:
# 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
最後,加觸發器:
# CREATE TRIGGER "tr_update_ts" BEFORE INSERT OR UPDATE
>> ON "public"."test" FOR EACH ROW
>> EXECUTE PROCEDURE "public"."update_ts"();
CREATE TRIGGER
所以,現在,讓我們來測試在它的INSERT部分:
# 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)
顯然它的工作原理。
現在,更新:
# update test set x = 2;
UPDATE 1
# select * from test;
x | ts
---+-------------------------------
2 | 2009-09-12 19:54:57.463933+02
(1 row)
TS已經改變。顯然你顯示的代碼有效,所以錯誤必須在其他地方。
顯示在psql我們 「\ d測試」 輸出,並且\ DF +的觸發功能。
我加入了完整的功能上面..但似乎大致相同 – David 2009-09-12 16:01:17
我編譯你的函數提供的代碼,和它的工作如預期的我。 – 2009-09-12 16:20:51
你可以做一個\ d併發布? –
2009-09-12 16:21:29