【问题标题】:How do I format text array and hstore data in a CSV/TSV file for importing into Postgres如何在 CSV/TSV 文件中格式化文本数组和 hstore 数据以导入 Postgres
【发布时间】:2021-11-04 23:57:12
【问题描述】:

我正在尝试将文本数组和 hstore 值从 CSV(实际上是 TSV)电子表格导入 Postgres,但我不断收到这两个错误的倍数:

ERROR: Syntax error near '}' at position 667

ERROR: malformed array literal: "" Detail: Array value must start with "{" or dimension information.

我的文本数组如下所示:{hello, world}

我的 hstore 值如下所示:{"hello" => "world", "goodbye" => "world"}

我没有使用 COPY 命令,而是通过我的 IDE (Goland) 数据库导航器或 Postico 2 导入文件。CSV 或 TSV 电子表格中数组和 hstore 数据的正确语法是什么用于导入 Postgres?

【问题讨论】:

    标签: postgresql csv hstore goland postico


    【解决方案1】:

    好的,所以对于需要像我一样将数组和 hstore 数据导入 Postgres 的人(电子表格导出为 TSV 然后通过 IDE 导入),这对我有用。

    对于我的文本数组,我需要将它们括在大括号中,并且只对其中包含空格的数组条目使用双引号。不需要转义字符或双引号。

    示例:{foo,"bar baz",qux}

    对于我的 hstore 值,不需要大括号,但需要为带有空格的键或值加上双引号 (AFAIK):

    示例:foo=>bar,baz=>"qux quuz"

    我不知道这是否有任何区别,但我消除了除了引号内的空格之外的所有空格(例如逗号和 => 周围)。此外,对于可以具有空值的数组列,这些列中的任何单元格将为空值,您必须在单元格中包含一个空数组(即 {})才能正确导入。

    我尚未尝试使用我的应用检索这些值,但由于它们现在在我的电子表格中,因此它们导入时不会出错。

    【讨论】:

      【解决方案2】:

      您必须在文本数组中用双引号括起您的字符串值:{"hello", "world"}。如果此字段在您的 csv/tsv 文件中已经被双引号(如 "{hello, world}"),那么您必须转义里面的双引号,例如:"{\"hello\", \"world\"}" 如果您的转义字符是 \,则在导入 csv/tsv 文件时邮递员。使用COPY时,可以指定你想要的转义字符,使用替代方案时,我不知道。

      【讨论】:

      • 感谢您的回复。请参阅我的答案,了解最终对我有用的方法。
      猜你喜欢
      • 1970-01-01
      • 2020-05-17
      • 2021-05-16
      • 1970-01-01
      • 2018-03-18
      • 2012-02-15
      • 1970-01-01
      • 1970-01-01
      • 2020-11-07
      相关资源
      最近更新 更多