BLOGサブスレッドの日常

2020.08.03

PostgreSQL \COPY を使ってデータの dump / restore

torikai

お久しぶりです。鳥飼です。よろしくお願いします。

PostgreSQLのデータをローカル開発環境に dump / restore したい時、どうしていますか?
大体はpg_dumpで dump して、よろしく restore する事が多いと思います。

psql\COPYを使ってデータを dump / restore することもできますよ!

  • スキーマの dump はできなかったり
  • 全体のデータをまるごと dump できなかったり

…と、制約はありますが、pg_dump以外を使う方法として覚えておくと、ふとした時に役に立つかもしれません。

例えば、PostgreSQL のクライアントとサーバーのバージョンが合わなくて、pg_dumpが使えない上に、クライアントとサーバーのバージョンを簡単に揃えられない事情がある場合などには有用かもしれません。

テーブルの内容をファイルにエクスポート

psql -h [ホスト名] -U [ユーザー名] -c "\COPY [テーブル名] to '[出力先のファイルパス]'" [データベース名]

出力先のファイルは psql を実行しているマシン上の、アクセス可能なファイルのパスを指定します。

ファイルの内容をDBにインポート

psql -h [ホスト名] -U [ユーザー名] -c "\COPY [テーブル名] from '[入力元のファイルパス]'" [データベース名]

入力元のファイルは psql を実行しているマシン上の、アクセス可能なファイルのパスを指定します。

ポイントとして、COPYではなく、\COPYです。
COPYの場合、データベースサーバマシン上のファイルに書き出されます。

参考: PostgreSQL 12.0文書 SQLコマンド COPY

ちょっとした豆知識でした。

この記事を書いた人

torikai