gpt4 book ai didi

python - 当 BEGIN 在自动提交模式下的连接上运行时,Postgres 会做什么?

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

在使用 Postgres (psycopg) 连接时,我试图更好地理解“自动提交”的概念。假设我有一个新连接,将其隔离级别设置为 ISOLATION_LEVEL_AUTOCOMMIT,然后直接运行此 SQL,而不使用游标开始/回滚方法(作为练习;并不是说我真的想这样做):

INSERT A
INSERT B
BEGIN
INSERT C
INSERT D
ROLLBACK

INSERT C 和 D 发生了什么?

autocommit 是否纯粹是 psycopg 中的一个内部设置,它会影响它如何发布 BEGIN?在那种情况下,上面的 SQL 不受影响;插入 A 和 B 在完成后立即提交,而 C 和 D 在事务中运行并回滚。该事务在什么隔离级别下运行?

或者自动提交是连接本身的真实设置吗?在那种情况下,它如何影响 BEGIN 的处理?它是被忽略了,还是覆盖了自动提交设置以实际启动事务?该事务在什么隔离级别下运行?

还是我完全偏离了目标?

最佳答案

自动提交模式意味着每个语句都隐式地开始和结束事务。

在你的例子中,如果自动提交关闭:

  • 客户端将为第一条语句隐式启动事务
  • BEGIN 会发出一个警告,说明交易已经开始
  • ROLLBACK 将回滚所有四个语句

当自动提交打开时,只有 cd 被回滚。

请注意,自 8.0 以来,PostgreSQL 没有内部 AUTOCOMMIT 行为:所有自动提交功能都依赖于客户端。

关于python - 当 BEGIN 在自动提交模式下的连接上运行时,Postgres 会做什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2478518/

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