2015-12-30

Heroku Postgresからのエクスポート

Heroku Postgresからのエクスポートの備忘録(今更感ありますが…)

\copyメタコマンドを使う場合

$ psql -U {username} -h {hostname} -p {port} \
> -c '\copy (SELECT * FROM hoge) to hoge.csv \
> WITH (FORMAT CSV,HEADER true)' {database}

COPYコマンドを使う場合

$ psql -U {username} -h {hostname} -p {port} \
> -c "copy (SELECT * FROM hoge) to STDOUT WITH (FORMAT CSV,HEADER true)" \
> {database} > hoge.csv

ちなみにCOPYコマンドで標準入出力ではなくファイル名を指定すると以下のエラーが発生します。

ERROR: must be superuser to COPY to or from a file
HINT: Anyone can COPY to stdout or from stdin. psql's \copy command also works for anyone.

\copy はクライアントのpsqlで処理されるため、ファイル指定も標準出力もクライアント側に出力されます。COPY コマンドに関してはサーバサイドで処理されるため、ファイル指定をすると、サーバサイドのパスを指定することになります。ファイル指定の場合は、サーバサイドのファイルをいじることになるので管理者権限が必要ですが、Heroku Postgresで発行されるアカウントは管理者権限を持っていないのでファイル指定はできません。そのため、COPYコマンドを使う場合は標準出力を指定して、クライアント側でそれを受け取ってエクスポートします。

参考URLはこちら↓

このエントリーをはてなブックマークに追加