テーブ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]の内容を実行しています。
上で作ったファイルでデータベースnewsalu
にfriends
テーブルを戻すには
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
ってどう使うんだろう?勉強してみます。
読んでくださってありがとうございます。
それではまた!
コメント
>pg_restoreってどう使うんだろう?勉強してみます。
pg_dump でバックアップを取る時に、オプションの指定によってテキスト形式とバイナリ形式と選ぶことができます。
オプションを特に指定しない場合、テキスト形式になります。
pg_restoreは、pg_dump でバックアップを取る際に、バイナリ形式で出力しないといけません。
-F, –formatオプションの指定でt, tarを指定してあげると、pg_restoreで復元できるんですね。
試してみます。勉強頑張ります!
ありがとうございます!