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



如果违反了特定命名的唯一约束,我想在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 $$

最新更新