pg_dumpで拡張機能をスキップするにはどうすればよいですか?


15

これは9.3にありますが、7.x以降に発生した同様のことを覚えています。そこで、データベースを作成し、plpgsql拡張機能をインストールします。後でpg_dumpを作成し、それをデータベースに復元する前に、plpgsql拡張機能も持っていることを確認します。次に、これを復元するときに発生します:

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';

私はたくさんのスクリプトを作成していますが、pg_restoreが0を返すことは非常に重要です。したがって、これを無視できるという事実は何の役にも立ちません。私が困惑しているのは、IIRCがpostgresマスターユーザーとして拡張機能を作成する必要があることです。そのため、この拡張機能がすべてダンプに終わる理由がわかりません。結局のところ、私は言語/拡張機能の所有者ではありませんか?

とにかく、私はこれを取り除く方法の提案に感謝します。-l / -Lスイッチがどのように機能するかを知っていることに注意してください。しかし、これはたった1つの単純な拡張コメントを修正するにはあまりにも手間がかかるようです。


3
FWIW、これは昨年報告されており、バグ#8695として議論されています。
ダニエルベリテ14

回答:



5

できるよ

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

postgresを使用してGoogle Cloud SQLにインポートするために使用するものです。

編集:このリテラルテキストを含む行を除外しないように、「行の開始」キャレットを追加しました。


2
そのテキストを含むレコードは削除される可能性がありますが、(スナップショットの最後に追加されるため)制約が欠落している破損したスキーマが作成されます。削除する代わりに「-」のプレフィックスを付けて、DROPケースも考慮します 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'
エルビスチョッティ

2

-Lカスタムファイル形式でダンプを取得した後、pg_restoreでフラグを使用します。

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

にリストされているアーカイブ要素のみlist-fileを復元し、ファイルに表示される順序で復元します。-nまたはなどのフィルタリングスイッチ-tを使用すると-L、復元されるアイテムがさらに制限されることに注意してください。

list-file通常、前の-l操作の出力を編集して作成されます。行は移動または削除できます;。また、行の先頭にセミコロン()を配置することでコメント化することもできます。[...]

参照:pg_restore(PostgreSQLドキュメント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

ここで、が正しいことがわかります。

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
--

DBA.SEへようこそ。あなたの貢献に感謝します。元の質問はPostgreSQLバージョン9.3についてですが、元の答えは9.5を参照していました。バージョン。それを反映するためにあなたの答えを少し修正しました。ただし、出力の一部はバージョン固有である可能性があり、バージョン9.3では異なる場合があります。
ジョン別名hot2use

0

データベースの他のオブジェクトなしでスキーマのみをエクスポートするには、パラメータを使用してスキーマの名前を指定できます --schema

pg_dump --schema=<schema_name> --schema-only <db_name> 
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.