PostgreSQLでselect結果をファイルに出力する |
$ psql db_name -c 'SELECT id FROM users;' -A -F \t
psqlから出力
全レコードを出力 (列区切りはタブ)
psql# COPY table_name TO '/home/tmp/data.txt' DELIMITERS '\t';
※COPYコマンドはimportにも使えるよう。
COPY table_name FROM ''/home/tmp/data.csv' DELIMITER ','
select文結果を出力
psql# \o /home/tmp/data.txt …出力先をファイルに
psql# \a …桁そろえをしない
Output format is unaligned.
psql# \pset fieldsep '\t' …セパレータの設定。列区切りはタブ
Field separator is ' '.
psql# SELECT id FROM users;
psql# \o …出力先を標準出力に
psql#
※ 出力結果から改行を取り除く
上記COPYコマンドを利用すると、改行は\r\n等に置き換えて出力される。
SELECT文の場合は改行のまま出力されるが、それだとその後の処理が面倒だったので
文章が入力されるカラムで改行を空白に置き換えた上で、文字数を100字に切って出力した。
psql# SELECT id, name, substr(regexp_replace(note, '\(\r\n|\r|\n\)', ' ', 'g'), 0, 100) FROM users;
ちなみに、日本語文字が半バイトで切られることはありませんでした(EUC-JP)。
pg_dumpというのもあるので、そのうち使ってみたい。参考