このブログをご覧のみなさん、こんにちは。

PostgreSQL からカンマ区切り (CSV) やタブ区切り (TSV) でデータを出力する場合、出力するデータに改行が入っていると CSV や TSV のフォーマットが崩れてしまい、Excel などでうまく開けない(=列が崩れる)時があります。出力してから改行コードを置換すると面倒ですし、大変なので、出力する際に変換する方法を調べたので、その手順をメモとして残しておきます。

改行コードを replace する

出力する際に replace 関数で置換します。置換対象の改行コードは以下のようになっています。

  • chr(13) : CR(キャリッジリターン)
  • chr(10) : LF(ラインフィード)
  • chr(13)||chr(10) : CRLF
select
  replace(replace(replace(example.example_data,chr(13)||chr(10),' '),chr(13),' '),chr(10),' ')
from
  example;