postgresql断言约束

时间:2018-02-13 21:55:43

标签: sql postgresql plpgsql

有没有办法在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;

这样做(-ish)。如果我可以指定有用的约束违规类型。

问题的第二部分:我如何将此(或类似的)包装到宏/自定义断言函数中?

1 个答案:

答案 0 :(得分:0)

针对特定约束违规有更多特定的SQL状态(请参阅the documentation),但基本上除非您要解析错误消息(这不是一个好主意),否则这是最好的

您可能还想查看PL / pgSQL中的ASSERT statement,它可用于检查条件。