postgresql 和 psycopg2 中的自动提交是什么意思?



在PostgreSQL和Psycopg2中,autocommit 的意思是一样的吗?

来自PostgreSQL手册

默认情况下(不带 BEGIN (, PostgreSQL 以"自动提交"模式执行事务,即每个语句都以自己的方式执行 事务提交在语句末尾隐式执行(如果执行成功, 否则将完成回滚(。

这是否意味着自动提交将为每个命令创建一个事务?

来自 Psycopg2 驱动程序手册

可以将连接设置为自动提交模式:这 方式所有执行的命令将立即提交,并且没有 可以回滚。一些命令(例如创建数据库,真空... 要求在任何事务之外运行:以便能够运行 来自 Psycopg 的这些命令,连接必须处于自动提交状态 模式:可以使用自动提交属性。

psycopg2.extensions.ISOLATION_LEVEL_AUTOCOMMIT

执行命令时不启动事务,也不提交(( 或 rollback(( 是必需的。一些PostgreSQL命令,例如 创建数据库或 VACUUM 无法运行到事务中:运行这样的 命令使用:

>>> conn.set_isolation_level(ISOLATION_LEVEL_AUTOCOMMIT)

"所有执行的命令都将立即提交"是否意味着 Psycopg2 中的自动提交为每个命令创建一个事务?

"执行命令时不启动任何事务,并且不需要 commit(( 或 rollback(("是否意味着 Psycopg2 中的自动提交将阻止为每个命令创建的事务?

"某些 PostgreSQL 命令(如 CREATE DATABASE 或 VACUUM (无法运行到事务中:要运行此类命令,请启用自动提交模式"是否意味着 Psycopg2 中的自动提交将阻止仅为某些命令(创建数据库或 VAVACUUM (创建的事务?

谢谢。

每个 PostgreSQL 语句都在事务中运行。

PostgreSQL 本身知道自动提交模式,这意味着如果你不显式启动事务,每个语句都将在自己的事务中运行。

VACUUM这样的语句不能与其他语句在同一事务中运行。

如果未在 psycopg2 中使用自动提交,则驱动程序必须通过在运行第一条语句时显式启动事务来模拟非自动提交模式。

最新更新