ゴール
PostgreSQLにcsvファイルからデータをインポートする際に、csvの中にjsonを含む場合のインポート方法を紹介します。
今回例で扱うcsvは以下のような簡単なファイルにします。
seq,jsonval
1,"{\"name\": \"MIKE\"}"
2,"{\"name\": \"Nancy\"}"
解決法
psqlコマンドDBに接続した後に\copyコマンドでquoteとescapeを指定すればOKです。
psql [DB名] [ユーザー名]
\copy [テーブル名] from '/dump/data/sample_json.csv' with csv header quote '"' escape '\';
ここでは引用符としてダブルクオーテーションを指定しているのでダブルクオーテーションで囲まれたものは一つの値としてみなされます。
ただしそれではjson中のkey-valueを囲うダブルクオーテーションを認識してしまって意図しない区切りになってしまいます。
そこでjson内のダブルクオーテーションはエスケープ(今回はバックスラッシュを指定)することで、引用符として認識しないよう指示することが出来ます。
seq|jsonval |
---+-----------------+
1|{"name": "MIKE"} |
2|{"name": "Nancy"}|
コメント