PostgreSQL(RDS)×COPYメタコマンドの課題
RDS上のPostgreSQLからCOPYメタコマンド(¥COPYで)データを抜いた際に、改行コードがLFになってしまう。
RDS上にあるPostgreSQLでCOPYメタコマンドを使うと環境の問題もあり改行コードLFとなってしまいます。
Windows環境では、改行コードをCRLFとしたいので、WindowsのCMDでCOPYメタコマンドを実行しアウトプットのCSVの改行コードをCRLFとする方法を残しておきます。
PostgreSQL(RDS)×COPYメタコマンドの改行問題の解決方法
動作検証で利用した環境はPostgreSQL12(RDS)、Windows10となります。
コンソールに出力→CSV出力とする。
具体的にSQLのサンプルを書くと、
psql -h localhost -p 5432 -U postgres -d testdb -c "¥COPY (SELECT * from test) TO "c:\test\test.csv"
このように書くと、改行コードをLFでCSV出力してしまいます。
そこで、
psql -h localhost -p 5432 -U postgres -d testdb -c "¥COPY (SELECT * from test) TO STDOUT " -o "c:\test\test.csv"
このように書き換えます。
ポイントは、
TO STDOUT " -o "c:\test\test.csv"
の部分で
TO STDOUT
とすることで、COPYメタコマンドで取得したデータをコンソールへ出力します。
-o "c:\test\test.csv"
でコンソールに出力したデータをCSV書き出します。
このようにコンソールに出力→CSV書き出しとすることで改行コードをLFからCRLFへ変換してCSVに出力することができます。
COPYメタコマンドとついでにCOPYコマンドについてはこちらのピープルソフトウェア様のブログでわかりやすく説明がされていましたのでオススメしておきます。
関連記事