PostgreSQLにJSONを含むcsvファイルをインポートする

スポンサーリンク

ゴール

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"}|

コメント