gpt4 book ai didi

postgresql - 当单个约束失败时,如何告诉 PostgreSQL 不要中止整个事务?

转载 作者:行者123 更新时间:2023-11-29 11:12:43 25 4
gpt4 key购买 nike

只要任何 SQL 语句以错误终止,包括任何约束违反,Postgres 都会自动中止事务。例如:

glyph=# create table foo (bar integer, constraint blug check(bar > 5));
CREATE TABLE
glyph=# begin;
BEGIN
glyph=# insert into foo values (10);
INSERT 0 1
glyph=# insert into foo values (1);
ERROR: new row for relation "foo" violates check constraint "blug"
STATEMENT: insert into foo values (1);
ERROR: new row for relation "foo" violates check constraint "blug"

尚未发布任何消息,但事务已回滚。本次 session 我个人最喜欢的台词如下:

glyph=# commit;
ROLLBACK

... 因为“ROLLBACK”似乎是一个奇怪的成功-COMMIT 的消息。但是,确实回滚了,表中没有行:

glyph=# select * from foo;
bar
-----
(0 rows)

我知道我可以创建大量的 SAVEPOINT 并以这种方式处理 SQL 中的错误,但这涉及到数据库的更多流量,更多的延迟(我可能不得不处理来自SAVEPOINT 毕竟),但 yield 相对较小。我真的只是想用 try/except 无论如何处理我的应用程序语言(Python)中的错误,所以我想要的 SQL 的唯一行为是错误不触发自动回滚。我能做什么?

最佳答案

非常是 PostgreSQL 的新手,但 PostgreSQL 文档中有关触发器/服务器端编程的示例之一看起来完全符合您的要求。

参见:http://www.postgresql.org/docs/9.2/static/trigger-example.html

页面片段:“所以触发器充当非空约束但不会中止事务。

关于postgresql - 当单个约束失败时,如何告诉 PostgreSQL 不要中止整个事务?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9436122/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com