1

私が欲しいもの:
データベースの pg_dump が必要です (データベースを「test」と呼びましょう)。この pg_dump では、データ、トリガー、関数、シーケンスなどを含まないテーブルのみが必要です。

欲しいものを手に入れるために私がしていること:
私が実行するコマンドは次のとおりです:

pg_dump -U postgres -s test > dump_test.sql

私が観察していること:
次に、次のように別のサーバーでこのダンプを復元しようとすると:

pg_dump -U postgres new_amazing_test < dump_test.sql

上記のコマンドを実行した出力の一部に、次のように表示されていることに気付きました。

CREATE TRIGGER
CREATE FUNCTION
CREATE SEQUENCE
CREATE INDEX

私が実際
に欲しいのは、これらのトリガー、関数、シーケンス、およびインデックスではなく、テーブル自体だけです。テーブルのみを取得するにはどうすればよいですか?

私が試した/検討した他のこと:

  1. 私はこれをやってみました:

    pg_dump -U postgres -s -schema=\dtmvE test > dump_test.sql
    

    しかし、パターンは \d パターンではなく名前である必要があるため、うまくいきませんでした。オプションの詳細については、https
    ://www.postgresql.org/docs/13/app-pgdump.html を参照してください。-n pattern

  2. それを解決するかもしれないことの 1 つは、次のように複数のスイッチを使用することです。

    pgdump -t mytable1 -t mytable2 -t mytable3 ... -t mytableN > dump_test.sql
    

    ただし、データベースに 70 以上のテーブルがあるため、上記の解決策は実用的ではありません。

その他の関連情報:
PostgreSQL のバージョンは 13.1
Ubuntu バージョン v16.04 です (Ubuntu v18.04 でもこれを試しました)

4

1 に答える 1

2

カスタム形式のスキーマのみのダンプ ( -F c -s) を使用してすべてをダンプpg_restore -lし、結果のダンプで実行します。これにより、目次が表示されます。そのファイルからテーブルを除くすべてを削除し、pg_restore -L必要なアイテムをアーカイブから正確に復元するための入力として使用します。

これはあなたが望んでいたほど単純ではないかもしれませんが、たくさんのオプションを書くよりは確かに簡単で、-t自動化できるかもしれません。

于 2020-11-25T07:24:35.747 に答える