有没有办法在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,它可以用于检查条件。

09-11 16:44