我正在运行 PostgreSQL 10 并且在我的表测试
上有几个BEFORE INSERT OR UPDATE
和AFTER INSERT OR UPDATE
。
我想要另一个触发器BEFORE INSERT OR UPDATE
,它应该检查潜在的重复行。
我做了这个:
CREATE OR REPLACE FUNCTION set_check_dublicate_on_test() RETURNS trigger AS $$
BEGIN
IF EXISTS (SELECT 1 FROM tests WHERE test_id = NEW.test_id) THEN
RETURN NULL;
ELSE
RETURN NEW;
END IF;
END;
$$ LANGUAGE plpgsql;
DROP TRIGGER IF EXISTS set_check_dublicate_on_test ON tests;
CREATE TRIGGER set_check_dublicate_on_test BEFORE INSERT OR UPDATE ON tests
FOR EACH ROW EXECUTE PROCEDURE set_check_dublicate_on_test();
但我不确定它是否会与其他触发器
冲突,或者是否会实现目标,如果返回 NULL
,触发器将被忽略?
最佳答案
首先 - 我相信如果你想在你的表中有一个唯一的字段 - 那么最简单的方法就是这样标记它:
https://www.postgresql.org/docs/current/ddl-constraints.html#DDL-CONSTRAINTS-UNIQUE-CONSTRAINTS
如果在这样的字段上尝试插入不应该引发错误,则有 ON CONFLICT
关键字:
https://www.postgresql.org/docs/current/sql-insert.html
特别是:ON CONFLICT DO NOTHING
关于sql - PostgreSQL,在插入之前检查重复项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57036234/