Dies ist auf 9.3, aber ich kann mich an ähnliche Ereignisse seit 7.x erinnern. Also erstelle ich eine Datenbank und installiere die plpgsql-Erweiterung darin. Später erstelle ich einen pg_dump und bevor ich ihn in die Datenbank zurückspeichere, stelle ich sicher, dass er auch die Erweiterung plpgsql hat. Wenn Sie dies wiederherstellen, geschieht Folgendes:
pg_restore: creating EXTENSION plpgsql
pg_restore: creating COMMENT EXTENSION plpgsql
pg_restore: [archiver (db)] Error while PROCESSING TOC:
pg_restore: [archiver (db)] Error from TOC entry 2053; 0 0 COMMENT EXTENSION plpgsql
pg_restore: [archiver (db)] could not execute query: ERROR: must be owner of extension plpgsql
Command was: COMMENT ON EXTENSION plpgsql IS 'PL/pgSQL procedural language';
Ich erstelle eine Reihe von Skripten und es ist ziemlich wichtig für mich, dass pg_restore 0 zurückgibt. Die Tatsache, dass ich dies einfach ignorieren kann, ist also nicht gut. Was mich verwundert, ist, dass ich als postgres-Master-Benutzer eine Erweiterung für IIRC erstellen muss, sodass ich keine Ahnung habe, warum all das EXTENSION-Zeug in meinem Dump landet. Immerhin bin ich kein Besitzer der Sprache / Erweiterung?
Wie auch immer, ich wäre dankbar für jeden Vorschlag, wie ich das loswerden könnte. Bitte beachten Sie, dass mir bekannt ist, wie die Schalter -l / -L funktionieren. Dies scheint jedoch viel zu aufwendig zu sein, um nur einen einfachen Erweiterungskommentar zu korrigieren.
quelle
Antworten:
Für alle, die nach einer Problemumgehung suchen, hat das Beschränken
pg_restore
auf ein bestimmtes Schema mir geholfen, diesen Fehler zu umgehen. Siehe /programming//a/11776053/11819quelle
-n
Flagge benutzteDu kannst tun
Es ist das, was ich zum Importieren von Google Cloud SQL mit Postgres verwende.
Bearbeiten: Das Caret 'Zeilenanfang' wurde hinzugefügt, um Zeilen, die diesen wörtlichen Text enthalten, nicht auszuschließen.
quelle
pg_dump | sed 's/DROP EXTENSION/-- DROP EXTENSION/g' | sed 's/CREATE EXTENSION/-- CREATE EXTENSION/g' | sed 's/COMMENT ON EXTENSION/-- COMMENT ON EXTENSION/g'
Verwenden Sie das
-L
Flag mit pg_restore, nachdem Sie einen Speicherauszug in einem benutzerdefinierten Dateiformat erstellt haben.Referenz: pg_restore (PostgreSQL-Dokumentation 9.3)
Hier können Sie sehen, dass das Gegenteil wahr ist:
quelle
Um nur ein Schema ohne andere Objekte der Datenbank zu exportieren, können Sie den Namen des Schemas mit dem Parameter angeben
--schema
quelle