有没有办法在PL/pgSQL中ASSERT
,但是对于异常而不是条件?即断言“违反X约束”将发生。
我能得到的最接近的是:
DECLARE xc integer DEFAULT 0;
BEGIN
INSERT INTO [...];
RAISE EXCEPTION 'Should not make it this far';
EXCEPTION
WHEN integrity_constraint_violation THEN
RAISE NOTICE 'Caught expected integrity violation';
xc := xc + 1;
ASSERT ((SELECT xc) = 1);
END;
这就完成了任务。如果我能指定有帮助的约束冲突类型。
问题的第二部分:如何将这个(或类似的)包装成宏/自定义断言函数?
最佳答案
对于特定的约束冲突有更具体的SQL状态(请参见the documentation),但实际上这是最好的,除非您想分析错误消息(这不是一个好主意)。
您可能还想查看PL/pgSQL中的ASSERT
statement,它可以用于检查条件。