postgresql
バックアップと復元
サーチ…
備考
pg_dumpall
とpg_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インスタンスに復元するのに十分ですが、 $PGDATA
( pg_hba.conf
とpostgresql.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
アラインされていない出力モードに切り替えます。 (デフォルトの出力モードは、そうでなければ整列されます。)