PostgreSQL和Psycopg2中的autocommit是否意味着相同?
来自PostgreSQL手册
默认情况下(没有BEGIN),PostgreSQL在“autocommit”模式下执行事务,即每个语句都在自己的事务中执行,并且在语句结束时隐式执行提交(如果执行成功,否则执行回滚)。
这是否意味着autocommit会为每个命令创建一个事务?
可以将连接设置为自动提交模式:这样执行的所有命令都将立即提交,并且无法回滚。一些命令(例如CREATE DATABASE、VACUUM...)需要在任何事务之外运行:为了能够从Psycopg运行这些命令,连接必须处于自动提交模式:您可以使用自动提交属性。
“所有执行的命令都将立即提交”是指在Psycopg2中启用自动提交是否会为每个命令创建一个事务?psycopg2.extensions.ISOLATION_LEVEL_AUTOCOMMIT
No transaction is started when commands are executed and no commit() or rollback() is required. Some PostgreSQL command such as CREATE DATABASE or VACUUM can’t run into a transaction: to run such command use:
>>> conn.set_isolation_level(ISOLATION_LEVEL_AUTOCOMMIT)
“当执行命令时,不会启动任何事务,也不需要commit()或rollback()”是指在Psycopg2中启用自动提交是否会防止为每个命令创建一个事务?
“一些PostgreSQL命令(例如CREATE DATABASE或VACUUM)无法运行在事务中:要运行这样的命令,请启用自动提交模式”是指在Psycopg2中启用自动提交是否只会防止为某些命令(如CREATE DATABASE或VACUUM)创建事务?
谢谢。
VACUUM
和相关命令时可能会出现错误。DROP DATABASE
也是这些命令之一。请注意,这些命令仍然在事务内运行:如果它们失败,它们将不起作用。 - Laurenz AlbeCOMMIT
,ROLLBACK
是否也可以结束一个事务? - Tim