use*_*159 4 postgresql error-handling plpgsql unique-constraint
我想在 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 $$
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1315 次 |
| 最近记录: |