PostgreSQL: ERROR: CREATE DATABASE kann in einer schreibgeschützten Transaktion nicht ausgeführt werden

7

Ich habe PostgreSQL und seine GUI pgAdmin III installiert.
Setup hatte bereits eine Standard-Datenbank postgres.

Wenn ich versuche, eine neue Tabelle oder Datenbank zu erstellen, wird ein Fehler angezeigt:

FEHLER: CREATE DATABASE kann in einer schreibgeschützten Transaktion nicht ausgeführt werden

Ich habe die Zeile default_transaction_read_only = offin postgresql.conf auskommentiert und den Befehl ausgeführt, pg_ctl start -D /home/jaison/progresData -Z datanode -l logfileaber es wird immer noch der gleiche Fehler angezeigt .

Bitte helfen Sie mir, dieses Problem zu beheben.

Jaison
quelle

Antworten:

5

Sie können Ihr Problem jederzeit überprüfen, indem Sie einen Befehl wie z

/usr/bin/pgsql/bin/createdb test

Sie können häufig bessere / klarere Fehlermeldungen und / oder andere Informationen über die Befehlszeile erhalten als über GUI-Tools wie pgAdmin III.

Um jedoch einen Systemparameter zu ändern, müssen Sie die postgresql.confDatei nach den Änderungen neu laden . Sie können dies entweder tun

  • Neustart des Servers oder

  • Neuladen der .conf-Datei oder

  • Änderung auf der Client-Seite

Von hier aus müssen einige Parameter immer neu gestartet werden, andere können durch einfaches Neuladen dynamisch geändert werden.

Ich habe versucht, eine übersichtliche Liste derjenigen zu finden, die neu gestartet und neu geladen werden mussten, bin jedoch fehlgeschlagen (dankbar für die Eingabe!).

Für einen Systemneustart

pgctl restart

Zum erneuten Laden können Sie auch diese Befehle ausprobieren (von hier aus - oder auf der oben angegebenen Dokumentationsseite).

Option 1: Über die Befehlszeilen-Shell

su - postgres /path/to/pg_ctl reload

Option 2: Verwenden von SQL

SELECT pg_reload_conf();

Sie können überprüfen, ob die Einstellung aus der Tabelle pg_settings "übernommen" wurde. Interessant ist auch diese Seite .

Für den default_transaction_read_onlyParameter können Sie ihn auch direkt vom Client aus einstellen (siehe hier ). Überprüfen Sie die Links hier , um alle Parameter festzulegen - Neustart, Neuladen oder Client.

test=# SELECT name, setting FROM pg_settings WHERE name = 'default_transaction_read_only';
             name              | setting 
-------------------------------+---------
 default_transaction_read_only | on
(1 row)

test=# 
test=# `SET default_transaction_read_only = OFF;`
SET
test=# 
test=# SELECT name, setting FROM pg_settings WHERE name = 'default_transaction_read_only';
             name              | setting 
-------------------------------+---------
 default_transaction_read_only | off
(1 row)

test=# 
test=# SET default_transaction_read_only = ON;
SET
Vérace
quelle
Es tut mir sehr leid. Aber ich konnte den Beitrag aus bestimmten Gründen nicht überprüfen. Aber dieser Beitrag scheint sehr nützlich zu sein. Vielen Dank
Jaison
@jaison - Wenn Sie der Meinung sind, dass die Antwort korrekt ist, markieren Sie sie bitte als solche. Dies hilft denjenigen, die nach Antworten auf dieselben oder ähnliche Fragen suchen.
Vérace