it-swarm.com.de

Wie mache ich die Erweiterung pg_dump überspringen?

Dies ist auf 9.3, aber ich kann mich an ähnliche Dinge erinnern, die seit 7.x geschehen sind. Also erstelle ich eine Datenbank und installiere die plpgsql-Erweiterung darin. Später erstelle ich einen pg_dump und bevor ich ihn in der Datenbank wiederherstelle, stelle ich sicher, dass er auch die Erweiterung plpgsql hat. Wenn dies dann wiederhergestellt wird, 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, nützt nichts. Was mich verwundert, ist, dass ich als Postgres-Master-Benutzer eine IIRC-Erweiterung erstellen muss, sodass ich keine Ahnung habe, warum all diese EXTENSION-Inhalte in meinem Dump landen. 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 viel Aufwand zu sein, um nur einen einfachen Erweiterungskommentar zu korrigieren.

16
Jacek Prucia

Für alle, die nach einer Problemumgehung suchen, die pg_restore zu einem bestimmten Schema hat mir geholfen, diesen Fehler zu umgehen. Siehe https://stackoverflow.com/a/11776053/11819

8
nfelger

Du kannst tun

pg_dump ... | grep -v -E '^(CREATE\ EXTENSION|COMMENT\ ON)' >out.sql

es ist das, was ich verwende, um mit Postgres in Google Cloud SQL zu importieren.

bearbeiten: Caret "Zeilenanfang" hinzugefügt, um Zeilen, die diesen wörtlichen Text enthalten, nicht auszuschließen.

5
Rene

Verwenden Sie das Flag -L Mit pg_restore, nachdem Sie einen Speicherauszug in einem benutzerdefinierten Dateiformat erstellt haben.

-L list-file
- use-list =list-file

Stellen Sie nur die Archivelemente wieder her, die in list-file aufgeführt sind, und stellen Sie sie in der Reihenfolge wieder her, in der sie in der Datei angezeigt werden. Beachten Sie, dass Filterschalter wie -n Oder -t Mit -L Die wiederhergestellten Elemente weiter einschränken.

list-file wird normalerweise durch Bearbeiten der Ausgabe einer vorherigen -l - Operation erstellt. Zeilen können verschoben oder entfernt werden und können auch durch Platzieren eines Semikolons (;) Am Zeilenanfang auskommentiert werden. [...]

Referenz :pg_restore (PostgreSQL-Dokumentation 9.3) =

pg_dump -Fc -f pg.dump db_name
pg_restore -l pg.dump | grep -v 'COMMENT - EXTENSION' | \
    grep 'plpgsql' > pg_restore.list
pg_restore --use-list pg_restore.list pg.dump

Hier können Sie sehen, dass die Inverse wahr ist:

pg_dump -Fc -f pg.dump db_name
pg_restore -l pg.dump | grep 'COMMENT - EXTENSION' | grep 'plpgsql' > pg_restore.list
pg_restore --use-list pg_restore.list pg.dump
--
-- PostgreSQL database dump
--

-- Dumped from database version 9.4.15
-- Dumped by pg_dump version 9.5.14

SET statement_timeout = 0;
SET lock_timeout = 0;
SET client_encoding = 'UTF8';
SET standard_conforming_strings = on;
SELECT pg_catalog.set_config('search_path', '', false);
SET check_function_bodies = false;
SET client_min_messages = warning;
SET row_security = off;

--
-- Name: EXTENSION plpgsql; Type: COMMENT; Schema: -; Owner: 
--

COMMENT ON EXTENSION plpgsql IS 'PL/pgSQL procedural language';


--
-- PostgreSQL database dump complete
--
2
Ligemer

Um nur ein Schema ohne andere Objekte der Datenbank zu exportieren, können Sie den Namen des Schemas mit dem Parameter --schema Angeben.

pg_dump --schema=<schema_name> --schema-only <db_name> 
0