如何将包含 JSON 的 CSV 文件导入 postgresql?

How can I import a CSV file containing JSON into postgresql?

我正在尝试导入此 CSV 文件:

HEADER
"{
  ""field1"": ""123"",
  ""field2"": ""456""
}"
"{
  ""field1"": ""789"",
  ""field2"": ""101""
}"

进入我的 Postgres table。

但是,\copy my_table(my_text) from 'my_file.csv' 命令似乎正在为文件的每一行创建一行。

这是我得到的:

                       my_text
-----------------------------------------------------
 HEADER
 "{
   ""field1"": ""123"",
   ""field2"": ""456""
 }"
 "{
   ""field1"": ""789"",
   ""field2"": ""101""
 }"
(9 rows)

以及我的期望:

{""field1"": ""123"", ""field2"": ""456""}
{""field1"": ""789"", ""field2"": ""101""}
(2 rows)

转义新行可能会成功:

\copy my_table(my_text) from my_file.csv csv header escape E'\n' quote '"'

\copy 的默认格式是“文本”格式,而不是“csv”格式。您所要做的就是告诉您的 \copy 使用 csv,并且有 header 行。

\copy my_table(my_text) from 'my_file.csv' csv header

按照其他答案的建议更改转义字符是不必要的,实际上会破坏事情。您的数据将加载,但将无效 JSON.

您可能希望此列类型为 JSON 或 JSONB,而不是文本。这将自动将您的数据验证为有效 JSON 数据,并且在 JSONB 的情况下将使将来对其的解析更快。