PostgreSQLでCSVを入出力する方法まとめ

CSVで書き出す

大抵はOSのshell側でpsqlのオプションで事足りる。

下記は一行目にヘッダがあり、','区切りになっているCSVファイルを出力する場合の例。

psql -U %ユーザー名% %DB名% -c '%SQL query文%' -A -F',' > %出力先ファイル名%

SQL文が長くなる時やは-fオプションでSQLを書いたファイルを指定する。

psql -U %ユーザー名% %DB名% -f %SQL query文が書かれたファイル名% -A -F',' > %出力先ファイル名%

ただし、上記の方法ではデータに区切り文字やエスケープ文字を含む場合に自動で修正はしてくれないため読み込み時に問題が発生する。そのため通常はCOPY文を使う(標準SQLではない)。

COPY
	%テーブル名またはSELECT文%
TO
	%出力先ファイル名のフルパス%
WITH
	CSV HEADER
;

PostgreSQL: Documentation: 14: COPY

なおCOPY文はサーバー権限で読み書きを行うため、psql内から手動で使う場合は\copyを使った方がよい。使い方はCOPY文と同じ。※単にCOPY\copyに置き換えればよい

PostgreSQL: Documentation: 14: psql

いくつかのpsqlメタコマンドで、psqlの出力そのものを標準出力からファイル出力に変更する事もできる。

***=# \a
***=# \f ','
***=# \out %出力先ファイル名%
***=# %SQL query文%
***=# \out

CSVを読み込む

COPY文(または\copy)を使う。

下記は一行目にヘッダがあり、','区切りになっているCSVファイルを読み込む場合の例。

COPY %読み込んだデータを展開するテーブル名% FROM %入力元CSVファイルのフルパス% DELIMITER ',' CSV HEADER;