Postgresql(通过 psql)似乎总是在每个语句之后自动提交,除非已发出开始,在这种情况下它会在提交/回滚时提交。很好。
但 ODBC 有一个自动提交标志,表示执行或不执行。交易的一种模式。这是一个不同于 using begins 的模型。
那么他们是如何互动的呢? ODBC autocommit 是否真的向服务器发送任何内容,或者如果设置为 false,它是否只是发出一个隐藏的开始?假设我有自动提交错误,然后做
-- autocommit = false in ODBC driver
-- no explicit begin
update 1;
update 2;
rollback;
-- no begin
update 4;
update 5;
rollback;
更新 4 会回滚吗?我假设其他人都回滚了。
拜托,不要说自动提交会在每次查询后自动提交。这是一个(相对)复杂的问题。
最佳答案
更新 4 将被回滚。
所有支持“autocommit = off”的客户端通过在事务结束后的第一个语句之前向服务器发送额外的 BEGIN
来实现。 PostgreSQL 本身并没有注意到这一点;它没有禁用自动提交的模式。
关于postgresql - Postgresql ODBC 自动提交模式的真正含义是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69308373/