特定于陷阱的命名唯一约束异常

时间:2018-03-29 16:31:54

标签: postgresql error-handling plpgsql unique-constraint

我想在plpgsql函数中捕获异常,如果它违反了特定的命名唯一约束,并且在所有其他情况下将原始错误抛出到客户端,包括其他唯一约束(匹配不同的名称)

我可以在手册中看到如何使用EXCEPTION WHEN unique_violation THEN针对所有唯一约束违规执行此操作,但我该如何才能针对特定的约束进行?

1 个答案:

答案 0 :(得分:1)

您可以在异常处理程序中通过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 $$
相关问题