1

次のコマンドを使用して、サーバーのデータベースからいくつかの構造をダンプし、ローカルハードドライブにデータのサンプルを作成できるようにします。

pg_dump -h myserver.com -U product_user -s -f ./data/base.structure.postgresql.sql -F p -v -T public.* -T first_product.* -T second_product.* -T another_product.locales mydatabase

一部のスキーマを除外する必要があります。そうしないと、アクセス許可やその他のエラーが発生します。スキーマpublicを除外しても、次のように、そのスキーマ内のすべての関数をダンプします。

REVOKE ALL ON FUNCTION gin_extract_trgm(text, internal) FROM PUBLIC;
psql:./data/base.structure.postgresql.sql:8482: ERROR:  function gin_extract_trgm(text, internal) does not exist

これはPostgreSQLのフルテキストまたは類似性プラグインからのものであることは知っていますが、私はそれを使用せず、自分のマシンでは必要ないので、これらの関数を除外したいと思います。

どうすればそれができますか?

4

3 に答える 3

8

それを行う方法があります。バックアップの名前がbackup.dumpであるとします。あなたがする必要があるのは:

$ pg_restore -l -f out.txt backup.dump

これにより、ダンプにあるオブジェクトのリストを含むファイルout.txtが作成されます。ファイルを編集して、復元したくないアイテムを削除する必要があります。次に、これを行います。

$ pg_restore -L out.txt -h your.host.name -U username ....  backup.dump

これは、ファイルout.txt(編集したもの)を使用して、復元するものを選択します。特にダンプが大きく、データベースを再ダンプできない場合に非常に便利です。

于 2015-06-25T06:52:28.733 に答える
3

一部のスキーマを除外する必要があります

pg_dumpには、スキーマを除外するためのスイッチがあります。

pg_dump -N schema ...

pg_dumpに関するマニュアルを引用します:

-Nスキーマ
--exclude-schema=schema

スキーマパターンに一致するスキーマをダンプしないでください。パターンは、-nの場合と同じルールに従って解釈されます。-Nを複数回指定して、いくつかのパターンのいずれかに一致するスキーマを除外できます。
..。


PostgreSQL 9.1以降では、拡張機能を別のスキーマに移動するための新しいオプションがあります。プリインストールされている古いスタイルのモジュールも含まれます。古いオブジェクトを(新しいスタイルの)拡張機能に登録してから、新しいツールを使用できます。とfulltextsimilarityあなたはおそらくとを意味fuzzystrmatchtsearch2ます。例:

拡張機能の既存の古いスタイルのオブジェクトを登録しますfuzzystrmatch

CREATE EXTENSION fuzzystrmatch SCHEMA public FROM unpackaged;

拡張機能を削除します。

DROP EXTENSION fuzzystrmatch;

別のスキーマにインストールします。

CREATE EXTENSION fuzzystrmatch SCHEMA my_schema;

もちろん、拡張機能のオブジェクトが使用されている場合は、拡張機能を削除することはできません。
また、別のスキーマにインストールする場合は、使用中の関数をスキーマ修飾するか、スキーマをに追加する必要がありますsearch_path

于 2012-03-15T07:54:47.293 に答える
0

上記のBartoszからの回答に加えて、次のsedコマンドを使用して、復元する前にリストから特定のFUNCTIONなどを削除できます。

sed -r -i -e '/FUNCTION public plpgsql_call_handler\(\) postgres/d' /var/backup/${DBNAME}.list 
于 2020-06-18T07:29:52.597 に答える