サーチ…


備考

pg_dumpallpg_dumpを使う代わりにファイルシステムをバックアップする

それはあなたがこれを使用する場合は、あなたが呼び出すことが非常に重要ですpg_start_backup()関数の前とpg_stop_backup()の後に機能を。ファイルシステムのバックアップを行うことは安全ではありません。それらの関数呼び出しなしでバックアップされたファイルシステムのZFSまたはFreeBSDスナップショットでも、データベースはリカバリモードになり、トランザクションが失われる可能性があります。

私は、Postgresのバックアップファイル(特にカスタムフォーマットのもの)が代替リストアをサポートすることで非常に汎用性があるため、通常のPostgresバックアップの代わりにファイルシステムバックアップを行うことは避けています。 1つのファイルなので、管理も面倒ではありません。

1つのデータベースをバックアップする

pg_dump -Fc -f DATABASE.pgsql DATABASE

-Fcは、「カスタムバックアップ形式」を選択します。これにより、生のSQLよりも強力です。詳細はpg_restoreを参照してください。バニラのSQLファイルが必要な場合は、代わりにこれを行うことができます:

pg_dump -f DATABASE.sql DATABASE

あるいは

pg_dump DATABASE > DATABASE.sql

バックアップの復元

psql < backup.sql

より安全な代替方法では、 -1を使用してリストアをトランザクション内にラップします。シェルリダイレクトを使用するのではなく、 -fがファイル名を指定します。

psql -1f backup.sql

データベースを指定するには、 -dオプションを指定してpg_restoreを使用してカスタム書式ファイルをリストアする必要があります。

pg_restore -d DATABASE DATABASE.pgsql

カスタム形式は、SQLに変換することもできます。

pg_restore backup.pgsql > backup.sql

リストアする項目を選択し、必要に応じて並列処理を有効にすることができるので、カスタム形式を使用することをお勧めします。

あるpostgresqlリリースから新しいものにアップグレードする場合は、pg_dumpに続いてpg_restoreを実行する必要があります。

クラスタ全体をバックアップする

$ pg_dumpall -f backup.sql

これは、データベースごとに一度複数の接続を行い、 pg_dumpを実行することで、背後で動作します。

場合によっては、これをcronジョブとして設定したくなるかもしれないので、バックアップがファイル名の一部として取られた日付を見たいと思うかもしれません:

$ postgres-backup-$(date +%Y-%m-%d).sql

ただし、毎日大きなファイルが作成される可能性があることに注意してください。 Postgresqlには、定期的なバックアップのためのより良いメカニズムがあります - WALアーカイブ

pg_dumpallからの出力は、同じ構成のPostgresインスタンスに復元するのに十分ですが、 $PGDATApg_hba.confpostgresql.conf )の設定ファイルはバックアップの一部ではないため、別々にバックアップする必要があります。

postgres=# SELECT pg_start_backup('my-backup');
postgres=# SELECT pg_stop_backup();

ファイルシステムのバックアップを取るには、これらの機能を使用して、バックアップの準備中にPostgresが一貫性のある状態になるようにする必要があります。

コピーを使用してインポートする

CSVファイルからテーブルにデータをコピーするには

COPY <tablename> FROM '<filename with path>';

/home/user/ user_data.csvという名前のファイルからテーブルのuser挿入するには:

COPY user FROM '/home/user/user_data.csv';

パイプで区切られたファイルからテーブルにデータをコピーするには

COPY user FROM '/home/user/user_data' WITH DELIMITER '|';

注: with delimiter付きのオプションwith delimiterない場合、デフォルトの区切り文字はカンマで,

ファイルのインポート中にヘッダ行を無視する

ヘッダーオプションを使用します。

COPY user FROM '/home/user/user_data' WITH DELIMITER '|' HEADER;

注:データが引用されると、デフォルトでデータ引用文字は二重引用符で囲まれます。他の文字を使用してデータを引用する場合は、 QUOTEオプションを使用します。ただし、このオプションは、CSV形式を使用する場合にのみ許可されます。

コピーを使用してエクスポートする

テーブルを標準o / pにコピーする

<tablename>をSTDOUTにコピー(DELIMITER '|');

テーブルユーザーを標準出力にエクスポートするには:

ユーザーをSTDOUTにコピーします(DELIMITER '|');

テーブルをファイルにコピーするには

COPYユーザーFROM '/ home / user / user_data' WITH DELIMITER '|';

SQL文の出力をファイルにコピーするには

COPY(SQL文)TO '<ファイル名>';

COPY(SELECT * FROM user WHERE user_name LIKE 'A%') '/ home / user / user_data';

圧縮ファイルにコピーするには

プログラムをユーザーにコピー 'gzip> /home/user/user_data.gz';

ここでプログラムgzipが実行され、ユーザーテーブルのデータが圧縮されます。

psqlを使ってデータをエクスポートする

コピーコマンドを使用するか、psqlコマンドのコマンドラインオプションを使用してデータをエクスポートすることができます。

csvデータをテーブルユーザーからcsvファイルにエクスポートするには:

psql -p \<port> -U \<username> -d \<database> -A -F<delimiter> -c\<sql to execute> \> \<output filename with path>

psql -p 5432 -U postgres -d test_database -A -F, -c "select * from user" > /home/user/user_data.csv

ここで、-Aと-Fを組み合わせることができます。

-Fは区切り文字を指定することです

-A or --no-align

アラインされていない出力モードに切り替えます。 (デフォルトの出力モードは、そうでなければ整列されます。)



Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow