
Contents
関連サイト
公式ドキュメントは下記。ちょうど真ん中あたりにメタコマンド下記
- PostgreSQL - general (ML) - Appending \o output instead of overwriting the output file(2009.2)
- End Point's blog - Using psql \o to append to a file(2010.3)
対話モードでなくコマンドラインから実行する例は下記を参照。と言っても、単に出力先を「>>
基本形
冒頭に書いたとおり「\o\pset border 2 \o R:/test_psql.txt -- NG: \o "R:/test_psql.txt" -- NG: \o '"R:/test_psql.txt"' select 1; select 2; select 3; -- close the file \o -- content of the file +----------+ | ?column? | +----------+ | 1 | +----------+ (1 row) +----------+ | ?column? | +----------+ | 2 | +----------+ (1 row) +----------+ | ?column? | +----------+ | 3 | +----------+ (1 row)


タブ区切り(TSV)で追記書き込み
前項のとおり\pset format unaligned \pset tuples_only on \pset fieldsep '\t' \o R:/test_psql.tsv select *, random() from generate_series(1, 10); select *, random() from generate_series(11, 20); -- close the file \o


カンマ区切り(CSV)で追記書き込み
TSV\pset format unaligned \pset tuples_only on -- to output csv \pset fieldsep ',' \o R:/test_psql.csv select *, text '', random() from generate_series(1, 10); select *, text '', random() from generate_series(11, 20); -- close the file \o


一回ごとに区切り線や印を付けながら、追記書き込み
例えば長いデータをずらずらと一ファイルに出力したいけど、一定行数ごとに区切り線や印を入れたい場合とか。メタコマンドの\pset format unaligned \pset tuples_only on \pset fieldsep '\t' \o R:/test_psql_sep.tsv select *, random() from generate_series(1, 10); \qecho ----- select *, random() from generate_series(11, 20); -- close the file \o


クエリだけでなく、メタコマンドの出力結果もファイルに追記できる
今回の\pset format aligned Output format is aligned. \pset border 2 Border style is 2. \pset tuples_only off Tuples only is off. \o R:/test_metacommand.txt \l \o -- content of the file List of databases +----------------+----------+----------+---------+-------+-----------------------+ | Name | Owner | Encoding | Collate | Ctype | Access privileges | +----------------+----------+----------+---------+-------+-----------------------+ | postgres | postgres | UTF8 | C | C | | | template0 | postgres | UTF8 | C | C | =c/postgres +| | | | | | | postgres=CTc/postgres | | template1 | postgres | UTF8 | C | C | =c/postgres +| | | | | | | postgres=CTc/postgres | | test_postgis22 | postgres | UTF8 | C | C | | +----------------+----------+----------+---------+-------+-----------------------+ (4 rows)


出力ごとにファイルを閉じたいなら、少し面倒だけど \g コマンド
最初の基本形で書いたように、「\o\pset border 2 Border style is 2. select generate_series(1, 10) -- セミコロン抜きで寸止め \g | find /v "" > R:/write_and_close.txt -- 上はファイルに新規書き込み。 -- 実行後はファイルが閉じられるので、他のエディタ等で編集可 select generate_series(11, 20) -- 今度は追記用のクエリを寸止め \g | find /v "" >> R:/write_and_close.txt -- これでファイルに追記規書き込み。


\o
この