FEHLER: kann nicht ausführen, erstellt eine TABELLE in einem nur-lese-Transaktion
Ich versuche, um den setup - pgexercises Daten in meiner lokalen Maschine. Wenn ich laufen: psql -U <username> -f clubdata.sql -d postgres -x
bekomme ich die Fehlermeldung: psql:clubdata.sql:6: ERROR: cannot execute CREATE SCHEMA in a read-only transaction
.
Warum erstellen Sie eine nur-Lesen Datenbank auf meinem lokalen Rechner? Kann ich das ändern?
- Welchen Benutzernamen verwenden Sie? Die access-Rechte hat dieser Benutzer? Kann Datenbanken erstellen?
Du musst angemeldet sein, um einen Kommentar abzugeben.
In der Regel am plausible Gründe für diese Art von Fehler sind :
versuchen, erstellen von Anweisungen auf einem nur-lese-Replikat (die gesamte Instanz schreibgeschützt ist).
<username>
hatdefault_transaction_read_only
eingestellt AUFdie Datenbank hat
default_transaction_read_only
eingestellt AUFSkript erwähnt hat in seinen ersten Zeilen:
und Sie berichten, dass der Fehler passiert mit
CREATE SCHEMA
in Zeile 6 nicht vor.Das bedeutet, dass die
CREATE DATABASE
funktioniert, beim ausführen von<username>
.Und es würde nicht funktionieren, wenn einer der oben genannten Gründen unmittelbar anwendbar ist.
Eine Möglichkeit das technisch zu erklären wäre, dass
default_transaction_read_only
wäreON
impostgresql.conf
- Datei, und legen Sie aufOFF
für die Datenbankpostgres
, der eine, der Aufruf von psql eine Verbindung hergestellt wird, durch eineALTER DATABASE
- Anweisung, die Vorrang vor der Konfigurationsdatei.Wäre, warum
CREATE DATABASE
funktioniert, aber dann, sobald es eine Verbindung zu einer anderen Datenbank mit\c
, diedefault_transaction_read_only
Einstellung der session flip zuON
.Aber natürlich wäre das eine ziemlich seltsame und ungewöhnliche Konfiguration.
default_transaction_read_only
auf off gesetzt ist.Erreicht pgexercises.com und Sie waren in der Lage, mir zu helfen.
Lief ich diese Befehle(getrennt):
Dann ließ ich die Datenbank aus dem terminal
dropdb exercises
und lief Skript wiederpsql -U <username> -f clubdata.sql -d postgres -x -q
Ich hatte immer
cannot execute CREATE TABLE in a read-only transaction
,cannot execute DELETE TABLE in a read-only transaction
und andere.Sie alle folgten einem
cannot execute INSERT in a read-only transaction
. Es war, als ob die Verbindung gewechselt hatte selbst mehr zu Lesen-nur in der Mitte meiner batch-Verarbeitung.Stellt sich heraus, ich lief aus dem Lager! Schreibzugriff wurde deaktiviert, wenn die Datenbank konnte nicht mehr alles schreiben. Ich bin mit Postgres auf Azure. Ich weiß nicht, ob der gleiche Effekt würde passieren, wenn ich war auf einem dedizierten server.