Max*_*kov 0 postgresql transaction
我开发了一个在 Postgresql 中实现事务的库,在我的工作中,我们在生产中遇到了一个奇怪的错误,当事务失败不是查询本身,而是COMMIT
由于触发器中的某些内容失败。显然,我的图书馆没有以正确的方式处理这种情况。
显然,我想在我的库测试套装中复制这个错误,但我不想引入所有复杂的设置。我需要的所有行为是,Postgresql 必须不向事务内的任何查询返回错误,而是在您尝试时返回错误COMMIT
。实现它的最小和稳定的方法是什么?
一种方法是使用延迟约束。
CREATE TABLE tst(x int CONSTRAINT test_me UNIQUE DEFERRABLE INITIALLY DEFERRED);
begin;
insert into tst values(1);
insert into tst values(1); -- Note: no error at this point
commit;
Run Code Online (Sandbox Code Playgroud)
COMMIT 失败:
ERROR: duplicate key value violates unique constraint "test_me"
DÉTAIL : Key (x)=(1) already exists.
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
30 次 |
最近记录: |