1

我正在尝试将文本数组和 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 导入文件。用于导入 Postgres 的 CSV 或 TSV 电子表格中的数组和 hstore 数据的正确语法是什么?

4

2 回答 2

1

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

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

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

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

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

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

我还没有尝试使用我的应用程序检索这些值,但由于它们现在在我的电子表格中,它们导入时没有错误。

于 2021-11-05T22:17:27.507 回答
0

您必须在文本数组中用双引号括起来您的字符串值:{"hello", "world"}。如果这个字段在你的 csv/tsv 文件中已经被双引号引用"{hello, world}",那么你必须转义里面的双引号,例如:"{\"hello\", \"world\"}"如果你的转义字符是\在 Postgres 中导入 csv/tsv 文件时。使用COPY时,您可以指定所需的转义字符,使用替代解决方案时,我不知道。

于 2021-11-05T07:21:55.837 回答