我正在尝试使用表列约束来测试重复值的事务的执行:
首次运行:
BEGIN TRANSACTION;
INSERT INTO table()...;
COMMIT;
result:
ERROR: duplicate key value violates unique constraint "uk_22de7s2pr0nc0c713fd38lgei"
DETAIL: Key (bin)=(111103) already exists.
SQL state: 23505
第二次运行:
ERROR: current transaction is aborted, commands ignored until end of transaction block
SQL state: 25P02
我在pgadmin中总是得到同样的错误。
你知道我怎样才能正确地回滚或从第一次捕获异常吗?
1条答案
按热度按时间whitzsjs1#
如果出现重复的键值,您希望执行以下操作:忽略冲突、更新现有行或报告异常。要忽略错误,请将
ON CONFLICT DO NOTHING
与INSERT
一起使用。同样,要更新现有行,请使用ON CONFLICT DO UPDATE ...
。如果要在终止事务后报告异常,请将代码 Package 在plpgsql块中:注意:对于单个语句,不需要使用
START TRANSACTION
和COMMIT
。当不在plpgsql块、过程或函数中时,每个语句都隐式地是单个事务。如果不使用START TRANSACTION
,则仍然会报告异常,但事务将自动终止。