如果违反了特定命名的唯一约束,我想在PLPGSQL函数中捕获异常约束(匹配其他名称(。
我可以在手册中看到如何使用EXCEPTION WHEN unique_violation THEN
来完成所有唯一的约束违规行为,但是我只能为特定的违规行为做?
您可以在异常处理程序中通过GET STACKED DIAGNOSTICS
获得约束名称:
CREATE TABLE t (id INTEGER PRIMARY KEY);
DO $$
DECLARE
n TEXT;
c TEXT := 'my_constraint_name';
BEGIN
INSERT INTO t VALUES (1), (1);
EXCEPTION
WHEN UNIQUE_VIOLATION THEN
GET STACKED DIAGNOSTICS n := CONSTRAINT_NAME;
IF n = c THEN
-- do whatever, your constraint raised this
ELSE
RAISE;
END IF;
END $$