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ってどう使うんだろう?勉強してみます。

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

それではまた!

コメント

  1. なるぞう より:

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

    pg_dump でバックアップを取る時に、オプションの指定によってテキスト形式とバイナリ形式と選ぶことができます。
    オプションを特に指定しない場合、テキスト形式になります。

    pg_restoreは、pg_dump でバックアップを取る際に、バイナリ形式で出力しないといけません。

    • さるまりん より:

      -F, –formatオプションの指定でt, tarを指定してあげると、pg_restoreで復元できるんですね。
      試してみます。勉強頑張ります!
      ありがとうございます!