To jest na 9.3, ale pamiętam podobne rzeczy, które wydarzyły się od 7.x. Więc tworzę bazę danych i instaluję w niej rozszerzenie plpgsql. Później tworzę plik pg_dump i przed przywróceniem go do bazy danych upewniam się, że ma on również rozszerzenie plpgsql. Następnie po przywróceniu dzieje się:
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';
Tworzę mnóstwo skryptów i dla mnie bardzo ważne jest to, że pg_restore zwraca 0, więc fakt, że mogę to zignorować, nie przynosi żadnego efektu. Zastanawiające jest dla mnie to, że IIRC muszę utworzyć rozszerzenie jako użytkownik główny postgres, więc nie mam pojęcia, dlaczego wszystkie te rozszerzenia dotyczące rozszerzenia kończą się na moim zrzutu. W końcu nie jestem właścicielem języka / rozszerzenia?
W każdym razie byłbym wdzięczny za wszelkie sugestie, jak się tego pozbyć. Pamiętaj, że wiem, jak działają przełączniki -l / -L. Wydaje się to jednak zbyt dużym wysiłkiem, aby poprawić tylko jeden prosty komentarz rozszerzenia.
źródło
Odpowiedzi:
Dla każdego, kto szuka obejścia, ograniczenie
pg_restore
do określonego schematu pomogło mi obejść ten błąd. Zobacz /programming//a/11776053/11819źródło
-n
flagiMożesz to zrobić
to jest to, czego używam do importowania do Google Cloud SQL z Postgres.
edycja: dodano kursor „początek linii”, aby nie wykluczać wierszy zawierających ten dosłowny tekst.
źródło
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'
Użyj
-L
flagi z pg_restore po zrobieniu zrzutu w niestandardowym formacie pliku.Odniesienie: pg_restore (Dokumentacja PostgreSQL 9.3)
Tutaj możesz zobaczyć, że odwrotność jest prawdą:
źródło
Aby wyeksportować tylko schemat bez żadnych innych obiektów bazy danych, możesz podać nazwę schematu za pomocą parametru
--schema
źródło