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

Postgresql 陷阱特定的命名唯一约束异常,postgresql,error-handling,plpgsql,unique-constraint,Postgresql,Error Handling,Plpgsql,Unique Constraint,我希望在plpgsql函数中捕获一个异常,如果它违反了特定的命名唯一约束,并且在所有其他情况下将原始错误抛出到客户端,包括其他唯一约束(与不同名称匹配) 我可以在手册中看到如何使用EXCEPTION WHEN unique\u invalition THEN对所有唯一约束冲突执行此操作,但如何仅对特定约束执行此操作?您可以通过异常处理程序中的get STACKED DIAGNOSTICS获取约束名称: CREATE TABLE t (id INTEGER PRIMARY KEY); DO $$

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


我可以在手册中看到如何使用
EXCEPTION WHEN unique\u invalition 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 $$

谢谢你!非常可怕的是,例外情况会如此深入:)