可以在 plpgsql 中捕获异常:
EXCEPTION WHEN unique_violation THEN
但如何检查是否违反特定约束呢?
以下示例创建两个键:一个用于a
,一个用于b
。如何知道是哪一个导致了异常呢?
create table t (
a text unique,
b text unique
);
create procedure insert_t(a text, b text)
language plpgsql
as $$
begin
insert into t values (a, b);
exception when unique_violation then
raise notice 'is it a or b?';
end
$$;
call insert_t('x', 'foo');
call insert_t('x', 'bar');
select * from t;
在异常处理程序中,您可以获取违反约束的名称:
有关详细信息,请参阅文档。