1
我有這張表,其中一列要填寫來自同一表的其他列的值(這些其他列表示分類層次結構,其最低級別希望以存儲在這個其他列)。Postgres - 'after update'觸發器不會觸發
要做到這一點,我實現以下觸發:
CREATE OR REPLACE FUNCTION get_taxon()
RETURNS TRIGGER LANGUAGE plpgsql AS
$BODY$
BEGIN
UPDATE taxon SET taxon = coalesce(subespecie, especie, genero, subfamilia, familia, infraordem, subordem, ordem, superordem, subclasse, classe, subphylum, phylum, reino)
WHERE taxon IS NULL;
RETURN NEW;
END
$BODY$
VOLATILE;
CREATE TRIGGER update_taxon
AFTER INSERT OR UPDATE ON taxon
FOR EACH STATEMENT
WHEN (pg_trigger_depth() = 0) -- Prevent recursive trigger calls
EXECUTE PROCEDURE get_taxon();
當我插入一個新的記錄觸發工作正常,但如果我更新現有的記錄,沒有任何反應 - 觸發會忽略UPDATE操作和我不知道爲什麼。
任何人都可以對此有所瞭解嗎?
謝謝Patrick!這就像一個魅力!一個問題,但。即使在閱讀官方Postgres文檔之後,我也不清楚爲什麼在這種情況下BEFORE觸發器比AFTER更好。據我所知,在觸發器被觸發之前,觸發器被觸發之前,相關的事件被提交給數據庫,但在這種情況下,這與觸發事件提交給數據庫之後的觸發器不同? – Lisdengard