技術ブログ

Heroku Postgresからデータをcsvエクスポートする

Heroku

Heroku Postgres からデータを csv 形式でエクスポートする機会があったので手順を残します。以下の記事で Postgres にデータを移したものの、無料枠のデータ上限に達してしまったので別の DB に移動することにしました。

Heroku
RDS MySQL8からHeroku PostgreSQL12へデータ移行する

前回は、Rails アプリケーションを Heroku にデプロイする方法を紹介しました。 今回は Amazon RDS ...

目次

  1. Heroku Postgres からデータをエクスポート
  2. ローカルの Postgres にデータをインポート
  3. ローカルの Postgres から CSV をエクスポート

Heroku Postgres からデータをエクスポート

Heroku Postgres からデータをエクスポートするには、管理画面からダウンロードする方法と Heroku CLI を使う方法があります。

バックアップをとり

heroku pg:backups:capture --app ${app_name}

最新のバックアップをダウンロードします

heroku pg:backups:download --output ~/Downloads/latest.dump --app ${app_name}

詳しくは Importing and Exporting Heroku Postgres Databases | Heroku Dev Center を参照。

ローカルの Postgres にデータをインポート

Heroku からエクスポートしたデータはバイナリで、テキストエディタで開くことはできません。ドキュメント によるとpg_restore コマンドでローカルの Postgres にインポートする必要があります。

ローカルの PostgreSQL は、今回は Docker で準備をします。以下のコマンドでエクスポートしたファイル latest.dump があるディレクトリ(今回は ~/Downloads)をボリュームをマウントして、PostgreSQL を起動します。

docker run -d --name my-postgres --rm -v ~/Downloads:/root/work -w /root/work -e POSTGRES_PASSWORD=password postgres:12-alpine

起動したら、コンテナに入ります。

docker exec -it my-postgres ash

ドキュメントにかかれているコマンドでダンプしたデータを読み込みます

pg_restore --verbose --clean --no-acl --no-owner -U postgres -d postgres latest.dump

pg_restore コマンドの詳細は pg_restore PostgreSQL 12 文章 を参照。

ローカルの Postgres から CSV をエクスポート

ここまでくればあと少し。ローカルに復元したテーブルからデータを CSV でエクスポートします。

psql コマンドで Postgres にログインします

psql -U postgres -d postgres

CSV 形式でエクスポートするには COPY を使います。以下は users テーブルのデータを users.csv にエクスポートする例です。今回はこのあと MySQL にインポートを予定しているので、デリミタにタブを指定して、列をダブルクオーテーションで囲んでいます。

\COPY users TO '/root/work/users.csv' WITH CSV DELIMITER E'\t' FORCE QUOTE * HEADER;

COPY について詳しくは COPY PostgreSQL 12 文章 を参照。

users テーブルのデータが csv で出力されました。ホストマシンの latest.dump があるディレクトリ(今回は ~/Downloads)から確認することができます。

~/Download/users.csv


id	email created_at
"2"	"foo@example.com"	"2020-11-01 04:52:24"
"1"	"bar@example.com"	"2020-11-01 04:35:53"

すべてのテーブルの csv 出力が終わったらコンテナを終了させて終了です。

docker stop my-postgres

-技術ブログ
-

© 2020 karakaram-blog