2016-05-04 18 views
1

Ich habe gerade ein neues PostgreSQL 9.5.2 eingerichtet, und es scheint, dass alle meine Transaktionen automatisch festgeschrieben sind.Transaktionen werden in PostgreSQL 9.5.2 automatisch festgeschrieben, ohne dass sie geändert werden kann?

Ausführen der folgenden SQL:

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

führt zu einer Warnung:

WARNING: there is no transaction in progress 
ROLLBACK 

auf einem verschiedenen Transaktion, die folgende Abfrage:

SELECT * FROM test; 

gibt tatsächlich die Zeile mit 1 (als ob die inse rt wurde verpflichtet).

Ich habe versucht, autocommit aus, aber es scheint, dass diese Funktion nicht mehr existiert (ich bekomme die unrecognized configuration parameter Fehler).

Was zum Teufel geht hier vor?

Antwort

3

Autocommit in Postgres wird von der SQL Client, nicht auf dem Server gesteuert.

In psql können Sie diese

\set AUTOCOMMIT off 

Einzelheiten im Handbuch verwenden tun:
http://www.postgresql.org/docs/9.5/static/app-psql.html#APP-PSQL-VARIABLES

In diesem Fall jeder Anweisung, die Sie ausführen startet eine Transaktion, bis Sie commit (einschließlich select laufen Anweisungen!)

Andere SQL-Clients haben andere Möglichkeiten Autocommit aktivieren/deaktivieren.


Alternativ können Sie begin verwenden, um eine Transaktion manuell zu starten.

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

Der '\ Set' Befehl scheint nicht, etwas zu beeinflussen. Das beginnt. Scheint mir wie ein Käfer. Ich benutze 'psql' unter Windows 10. –

+0

' \ set AUTCOMMIT off' funktioniert definitiv. Hast du vielleicht Kleinbuchstaben benutzt? Bei Variablennamen in 'psql' wird zwischen Groß- und Kleinschreibung unterschieden. –

+0

Ja, es funktioniert; es ist Groß- und Kleinschreibung (warum gibt es keinen Fehler, wenn ich es falsch verstehe, obwohl?). Gibt es trotzdem eine Einstellung zum Laden des Clients mit einer Standardeinstellung zum automatischen Festschreiben? –

0
\set AUTCOMMIT 'off'; 

Die off value in einfache Anführungszeichen sollte

+0

Bereits beantwortet von @a_horse_with_no_name. Aber danke :) –