kasei_sanのブログ

かせいさんのIT系のおぼえがきです。胡乱の方はnoteとtwitterへ

PostgreSQLでのdump、restore、COPYおぼえがき

データベースの dump

pg_dump -d ${dbname}  > /var/tmp/dbname.dump

特定のテーブルのみ dump

pg_dump -d ${dbname} -t ${tablename}  > /var/tmp/dbname.dump

特定のテーブル 以外を dump

pg_dump -d ${dbname} -T ${tablename}  > /var/tmp/dbname.dump

データベースのリストア

pg_restore -d ${dbname} --jobs8  /var/tmp/dbname.dump
  • jobs オプションは、indexの作成などを複数ジョブで実行するためのコマンド。CPUの数以内にする

上記の場合、dumpファイルにDBの削除/生成の命令は入らないので、リストア前に手動でDBを削除/生成する必要がある

COPYコマンドを使って、データの一部だけdump,restoreする方法

データのdump

COPY  (SELECT * FROM ${table_name} WHERE id > 123456789) TO '/var/tmp/tablename.dump';

データのrestore

COPY  (SELECT * FROM ${table_name} WHERE id > 123456789) FROM '/var/tmp/tablename.dump';
  • テーブルは生成されないので、先に以下のコマンドでdump/restoreしておく

テーブルのスキーマのみdumpする方法

pg_dump -d idoudb --no-acl -t ${table_name} -s > /var/tmp/table_name_schema.sql

Aurora PostgreSQLにCOPYコマンドでrestoreする方法

Auroraにはファイルを置けないので、標準入力を使う

cat /var/tmp/tablename.dump | psql -c "COPY tablename FROM STDIN"

参考