【问题标题】:How can I import a CSV file containing JSON into postgresql?如何将包含 JSON 的 CSV 文件导入 postgresql?
【发布时间】:2021-07-09 12:35:50
【问题描述】:

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

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

进入我的 Postgres 表。

但是,\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)

【问题讨论】:

    标签: database postgresql csv import-from-csv


    【解决方案1】:

    转义新行可能会成功:

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

    【讨论】:

    • 使用这种方法,我得到了 2 行,以 '{' 作为值。
    • 你确定吗?请记住,新行是字符串的一部分,因此如果您使用pgadmin 之类的工具来可视化结果集,您可能需要“调整”行的大小才能看到整个内容。在我的机器上它工作得很好@JamieA
    【解决方案2】:

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

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

    如另一个答案所暗示的那样更改转义字符是不必要的,实际上会破坏事情。您的数据将加载,但不是有效的 JSON。

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

    【讨论】:

      猜你喜欢
      • 2017-01-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-03-23
      • 2021-10-20
      • 2011-02-07
      相关资源
      最近更新 更多