PostgreSQLでテーブル単位でバックアップ&リストアする方法

テーブrこんにちは、さるまりんです。

PostgreSQLのデータベースで特定のテーブルだけ、データを別のところに移したい場合はこんな操作で実施できます。

バックアップ

PostgreSQLのコマンドpg_dumpを使います。

pg_dump -t [テーブル名] [DB名] > [ファイル.sql]

これでデータベース[DB名]の[テーブル名]テーブルのスキーマ情報とデータがSQL形式で[ファイル.sql]に出力されます。

データはいらないからテーブルのスキーマだけでいい場合は-sオプションをつけます。

pg_dump -t -s [テーブル名] [DB名] > [ファイル.sql]

salumarineデータベースからfriendsテーブル(スキーマとデータの両方)をファイルfriends.sqlにバックアップするには

pg_dump -t friends salumarine > friends.sql

のコマンドを実行します。

リストア

今度はリストア、テーブルを元に戻します。

SQL形式のファイルを使って元に戻すときは、コマンドpsqlを使います。

psql -d [DB名] < [ファイル.sql]

もしくは

psql -d [DB名] -f [ファイル.sql]

です。

[DB名]のデータベースにpg_dumpで出力されたファイル[ファイル.sql]の内容を実行しています。

上で作ったファイルでデータベースnewsalufriendsテーブルを戻すには

psql -d newsalu < friends.sql

です。

pg_restoreというプログラムもあり、それを使って戻せるのかなと思っていたらこんなエラーが出ました。

pg_restore: [archiver] input file appears to be a text format dump. Please use psql.

Please use psql. 「psqlを使って」と言われたので、素直に使って戻してみました。

pg_restoreってどう使うんだろう?勉強してみます。

読んでくださってありがとうございます。

それではまた!