事务是在 PostgreSQL 9.5.2 上自动提交的,没有更改它的选项?
Transactions are auto committed on PostgreSQL 9.5.2 with no option to change it?
我刚刚设置了一个新的 PostgreSQL 9.5.2,似乎我所有的事务都是自动提交的。
运行以下SQL:
CREATE TABLE test (id NUMERIC PRIMARY KEY);
INSERT INTO test (id) VALUES (1);
ROLLBACK;
导致警告:
WARNING: there is no transaction in progress
ROLLBACK
在 不同的 交易中,以下查询:
SELECT * FROM test;
实际上 returns 具有 1
的行(就像插入已提交一样)。
我试图关闭 autocommit
,但似乎此功能不再存在(我收到 unrecognized configuration parameter
错误)。
这到底是怎么回事?
Postgres 中的自动提交由 SQL 客户端 控制,而不是在服务器上。
在 psql
中,您可以使用
\set AUTOCOMMIT off
手册中有详细说明:
http://www.postgresql.org/docs/9.5/static/app-psql.html#APP-PSQL-VARIABLES
在这种情况下,您执行的每个 语句都会启动一个事务,直到您 运行 commit
(包括 select
语句!)
其他 SQL 客户端有其他 enabling/disabling 自动提交的方式。
或者您可以使用 begin
手动启动交易。
http://www.postgresql.org/docs/current/static/sql-begin.html
psql (9.5.1)
Type "help" for help.
postgres=> \set AUTCOMMIT on
postgres=> begin;
BEGIN
postgres=> create table test (id integer);
CREATE TABLE
postgres=> insert into test values (1);
INSERT 0 1
postgres=> rollback;
ROLLBACK
postgres=> select * from test;
ERROR: relation "test" does not exist
LINE 1: select * from test;
^
postgres=>
\set AUTCOMMIT 'off';
off value
应该用单引号括起来
这应该有效。 \set AUTOCOMMIT
关闭。请参阅下面的示例。
account_dept=# \set AUTOCOMMIT off
account_dept=# update account set ACCT_BALANCE= acct_balance + 200 WHERE ACCT_NUM=1;
UPDATE 1
account_dept=# rollback;
我刚刚设置了一个新的 PostgreSQL 9.5.2,似乎我所有的事务都是自动提交的。
运行以下SQL:
CREATE TABLE test (id NUMERIC PRIMARY KEY);
INSERT INTO test (id) VALUES (1);
ROLLBACK;
导致警告:
WARNING: there is no transaction in progress
ROLLBACK
在 不同的 交易中,以下查询:
SELECT * FROM test;
实际上 returns 具有 1
的行(就像插入已提交一样)。
我试图关闭 autocommit
,但似乎此功能不再存在(我收到 unrecognized configuration parameter
错误)。
这到底是怎么回事?
Postgres 中的自动提交由 SQL 客户端 控制,而不是在服务器上。
在 psql
中,您可以使用
\set AUTOCOMMIT off
手册中有详细说明:
http://www.postgresql.org/docs/9.5/static/app-psql.html#APP-PSQL-VARIABLES
在这种情况下,您执行的每个 语句都会启动一个事务,直到您 运行 commit
(包括 select
语句!)
其他 SQL 客户端有其他 enabling/disabling 自动提交的方式。
或者您可以使用 begin
手动启动交易。
http://www.postgresql.org/docs/current/static/sql-begin.html
psql (9.5.1)
Type "help" for help.
postgres=> \set AUTCOMMIT on
postgres=> begin;
BEGIN
postgres=> create table test (id integer);
CREATE TABLE
postgres=> insert into test values (1);
INSERT 0 1
postgres=> rollback;
ROLLBACK
postgres=> select * from test;
ERROR: relation "test" does not exist
LINE 1: select * from test;
^
postgres=>
\set AUTCOMMIT 'off';
off value
应该用单引号括起来
这应该有效。 \set AUTOCOMMIT
关闭。请参阅下面的示例。
account_dept=# \set AUTOCOMMIT off
account_dept=# update account set ACCT_BALANCE= acct_balance + 200 WHERE ACCT_NUM=1;
UPDATE 1
account_dept=# rollback;