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

Python 在自动提交模式下连接上运行BEGIN时,Postgres会做什么?,python,sql,postgresql,autocommit,psycopg,Python,Sql,Postgresql,Autocommit,Psycopg,在使用Postgres psycopg连接时,我试图更好地理解“自动提交”的概念。假设我有一个新的连接,将其隔离级别设置为隔离级别自动提交,然后直接运行此SQL,而不使用游标开始/回滚方法作为练习;不是说我真的想这么做: INSERT A INSERT B BEGIN INSERT C INSERT D ROLLBACK C&D会发生什么 autocommit是否纯粹是psycopg中的一个内部设置,它会影响问题的开始方式?在这种情况下,上述SQL不受影响;插入A&B在完成后立

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

INSERT A
INSERT B
BEGIN
    INSERT C
    INSERT D
ROLLBACK
C&D会发生什么

autocommit是否纯粹是psycopg中的一个内部设置,它会影响问题的开始方式?在这种情况下,上述SQL不受影响;插入A&B在完成后立即提交,而C&D在事务中运行并回滚。该事务在什么隔离级别下运行

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


还是我完全偏离了目标?

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

在您的情况下,如果“自动提交”处于关闭状态:

客户端将隐式启动第一条语句的事务 BEGIN将发出警告,说明事务已启动 回滚将回滚所有四条语句 启用“自动提交”时,仅回滚c和d


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

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

在您的情况下,如果“自动提交”处于关闭状态:

客户端将隐式启动第一条语句的事务 BEGIN将发出警告,说明事务已启动 回滚将回滚所有四条语句 启用“自动提交”时,仅回滚c和d


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

默认情况下,PostgreSQL启用了自动提交,这意味着每个语句都作为事务处理。如果您明确地告诉它启动一个事务,如您的示例中所示,那么这些项目将在一个新事务中


在您的示例中,A和B将被提交,C和D将被回滚。

默认情况下,PostgreSQL已启用自动提交,这意味着每个语句都作为事务处理。如果您明确地告诉它启动一个事务,如您的示例中所示,那么这些项目将在一个新事务中


在您的示例中,A和B将被提交,C和D将被回滚。

当psycopg上有autocommit时,只会将所有内容发送到PostgreSQL后端,而不尝试为您管理事务。如果不使用BEGIN/COMMIT/ROLLBACK,则会立即执行并提交每个.execute调用。您可以通过发出BEGIN/COMMIT/ROLLBACK命令来执行自己的事务管理。显然,在自动提交模式下,您不能调用conn.commit或conn.rollback,因为psycopg不跟踪事务,而只是将您需要执行的任何内容发送到后端


在您的示例中,A和B将被提交,C和D将被回滚。

当psycopg启用自动提交时,只会将所有内容发送到PostgreSQL后端,而不尝试为您管理事务。如果不使用BEGIN/COMMIT/ROLLBACK,则会立即执行并提交每个.execute调用。您可以通过发出BEGIN/COMMIT/ROLLBACK命令来执行自己的事务管理。显然,在自动提交模式下,您不能调用conn.commit或conn.rollback,因为psycopg不跟踪事务,而只是将您需要执行的任何内容发送到后端


在您的示例中,A和B将被提交,C和D将被回滚。

我问的是启用自动提交时的行为。@DNS:请查看链接到对上述问题的评论的Postgres文档。它非常清楚地说明了“自动提交”处于启用状态时的行为。@ar:它没有;它解释了当您执行时会发生什么,即插入本身,没有开始。这很简单。我的问题是询问设置为自动提交模式的psycopg连接在BEGIN+回滚/提交块中执行某项操作时的行为。@Quassnoi:刚刚注意到您的编辑将自8.0以来的自动提交作为客户端功能。我将保留此选项,以防其他答案可以添加更多内容,但这正是我所要查找的。我正在询问启用“自动提交”时的行为。@DNS:查看链接到对上述问题的评论的Postgres文档。它非常清楚地说明了“自动提交”处于启用状态时的行为。@ar:它没有;它解释了当您执行时会发生什么,即插入本身,没有开始。这很简单。我的问题是询问设置为自动提交模式的psycopg连接在执行时的行为
BEGIN+回滚/提交块中的某个内容。@Quassnoi:刚刚注意到您的编辑将自8.0以来的自动提交作为客户端功能。我会把这个问题留一点余地,以防其他答案会增加更多,但这正是我所寻找的。