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

Tim*_*Tim 6 postgresql psycopg2

自动提交在 PostgreSQL 和 Psycopg2 中的含义相同吗?

来自 PostgreSQL 手册

默认情况下(没有BEGIN),PostgreSQL的在“自动提交”模式,即,执行交易每个语句在自己的事务执行和被隐含在声明的末尾进行提交(如果执行成功,否则回滚完成)。

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

来自Psycopg2 驱动程序手册

可以在自动提交模式下设置连接:这样 所有执行的命令将立即提交并且不可能回滚。一些命令(例如 CREATE DATABASE、VACUUM...)需要在任何事务之外运行:为了能够从 Psycopg 运行这些命令,连接必须处于自动提交模式:您可以使用自动提交属性。

和

psycopg2.extensions.ISOLATION_LEVEL_AUTOCOMMIT
Run Code Online (Sandbox Code Playgroud)

执行命令时不会启动事务,并且不需要 commit() 或 rollback()。 某些 PostgreSQL 命令(例如 CREATE DATABASE 或 VACUUM)无法运行到事务中:要运行此类命令,请使用:

>>> conn.set_isolation_level(ISOLATION_LEVEL_AUTOCOMMIT)
Run Code Online (Sandbox Code Playgroud)

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

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

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

谢谢。

Lau*_*lbe 7

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

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

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

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