2016-05-04 8 views
1

私は新しいPostgreSQL 9.5.2をセットアップしました。私のトランザクションはすべて自動的にコミットされているようです。警告でトランザクションはPostgreSQL 9.5.2で自動的にコミットされますが、変更するオプションはありませんか?

CREATE TABLE test (id NUMERIC PRIMARY KEY); 
INSERT INTO test (id) VALUES (1); 
ROLLBACK; 

結果:

SELECT * FROM test; 

が実際に行を返します。異なるトランザクション、次のクエリに

WARNING: there is no transaction in progress 
ROLLBACK 

次のSQLを実行している

1(例えば、inse rtがコミットされました)。

私はautocommitをオフに設定しようとしましたが、この機能はもう存在しないようです(unrecognized configuration parameterエラーが発生します)。

ここで何が起こっていますか?

答えて

3

Postgresの自動コミットは、サーバーではなくSQL クライアントによって制御されます。

psqlであなたが

\set AUTOCOMMIT off 

詳細はマニュアルに記載されている使用してこれを行うことができます:あなたはcommitselectを含む実行するまで、その場合には
http://www.postgresql.org/docs/9.5/static/app-psql.html#APP-PSQL-VARIABLES

あなたが実行するすべての文は、トランザクションを開始しますステートメント!)

他のSQLクライアントには他の方法があります自動コミットを有効または無効にする方法について説明します。


また、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=> 
+0

に '\のset'コマンドでなければなりません何も影響を与えていないようです。 'begin'はそうです。私にはバグのようだ。私はWindows 10で 'psql'を使用しています。 –

+0

' \ set AUTCOMMIT off'は最も確かに動作します。あなたはおそらく小文字を使いましたか? 'psql'の変数名は大文字と小文字が区別されます。 –

+0

うん、それは動作します。大文字と小文字が区別されます(ただし、間違ってもエラーがないのはなぜですか?)。クライアントをデフォルトの自動コミットオフ設定でロードするように設定する方法はありますか? –

0
\set AUTCOMMIT 'off'; 

off valueは、単一引用符

+0

@a_horse_with_no_nameによって既に回答済みです。でもありがとう :) –

関連する問題