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