【发布时间】:2023-03-18 02:34:01
【问题描述】:
在几个 SO 答案(1、2)中,建议如果存在冲突且 ON CONFLICT DO NOTHING 在触发语句中,则不应触发 INSERT 触发器。也许我理解错了,但在我的实验中似乎并非如此。
这是我的 SQL,在 Postgres 9.6 上运行。
CREATE TABLE t (
n text PRIMARY KEY
);
CREATE FUNCTION def() RETURNS trigger AS $$
BEGIN
RAISE NOTICE 'Called def()';
RETURN NEW;
END;
$$ LANGUAGE plpgsql;
CREATE TRIGGER deftrig BEFORE INSERT ON t FOR EACH ROW EXECUTE PROCEDURE def();
如果我再运行几个插入:
testdb=> insert into t (n) values ('dummy') on conflict do nothing;
NOTICE: Called def()
INSERT 0 1
testdb=> insert into t (n) values ('dummy') on conflict do nothing;
NOTICE: Called def()
INSERT 0 0
我本来希望第一次看到Called def(),但下次不会。
我做错了什么?
【问题讨论】:
标签: postgresql triggers