Die Berechtigung zum Erstellen von "pg_catalog.tabellenname" während der Ausrichtung von pg_dump auf einen anderen Computer wurde verweigert

10

Ich versuche, einige Tabellen von einer 9.5 Beta 2 auf einen 9.4.4 Server zu sichern. Die Form des Befehls, den ich verwende, ist der Standard:

pg_dump -t table dbname | psql -h hostname -d dbname

Ich verwende den Postgres-Benutzer, von dem ich weiß, dass er wahrscheinlich nicht ideal ist, aber da dies beide Entwicklungsdatenverarbeitungsboxen sind, die nur ich verwende, ist er für den folgenden Fehler relevant. Anfangs habe ich den Fehler bekommen

FEHLER: nicht erkannter Konfigurationsparameter "row_security"

Dies wird erwartet, da diese Funktion in 9.5 neu ist, und ja, mir ist klar, dass es nicht ratsam ist, zwischen verschiedenen Postgres-Versionen zu pg_dump, aber leider unvermeidlich, da ich einen sehr obskuren Fehler gefunden habe und einen großen verschieben muss Menge der statischen Daten einmal.

Verwenden Sie diesen abscheulichen Hack, um den Fehler row_security zu entfernen, und aktivieren Sie stop beim ersten Fehler:

pg_dump -t tablemame dbname |sed 's/SET row_security = off;//'|
psql -v ON_ERROR_STOP=1 -h hostname -d dbname

Ich bekomme jetzt:

FEHLER: Berechtigung zum Erstellen von "pg_catalog.tabellenname" verweigert. DETAIL: Systemkatalogänderungen sind derzeit nicht zulässig

Obwohl es möglicherweise unerwünscht ist, den Postgres-Benutzer / die Postgres-Rolle zu verwenden, sollte meines Erachtens keine Berechtigungsprobleme dieser Art vorliegen. Ich bin offen für Vorschläge, die berücksichtigen, dass dies eine einmalige Operation ist und dass es sich um Datenverarbeitungsentwicklungsboxen handelt, die nicht mit Live-Diensten verbunden sind. Daher wird Zweckmäßigkeit gegenüber idealen Unternehmensdatenzugriffsrichtlinien bevorzugt. Trotzdem wäre es gut zu verstehen, wie man das richtig macht und dies in Zukunft vermeidet.

John Powell
quelle

Antworten:

13

Dies ist auf eine etwas undurchsichtige Fehlermeldung zurückzuführen, die auftritt, wenn das Schema, aus dem Sie mit pg_dump sichern, nicht auf der Zieldatenbank / dem Zieldatencomputer vorhanden ist. Ich werde diese Frage verlassen, in der Hoffnung, dass sie jemand anderem helfen könnte.

John Powell
quelle
Ist mir auch passiert, zum Glück habe ich das gefunden. Einfach manuell das 'öffentliche' Schema erstellt und es hat funktioniert.
Robert Mikes
@ RobertMikes. Froh, dass ich Helfen kann. Es ist ein etwas dunkler Fehler.
John Powell
Vielen Dank - zum Glück habe ich das gefunden, bevor ich mich zu sehr darauf eingelassen habe!
James Fry
+1. Dieses Problem hat mich auch nur gestolpert!
Jay Cummins