我正试图从CSV(实际上是TSV(电子表格将文本数组和hstore值导入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的正确语法是什么?
好的,所以对于任何需要将数组和hstore数据导入Postgres的人来说,就像我一样(电子表格导出为TSV,然后通过IDE导入(,这对我来说是有效的。
对于文本数组,我需要将它们括在大括号中,并且只对其中有空格的数组条目使用双引号。不需要转义符或双引号。
示例:{foo,"bar baz",qux}
对于我的hs存储值,不需要大括号,但键或带空格的值需要双引号(AFAIK(:
示例:foo=>bar,baz=>quot;qux-quuz">
我不知道这是否有什么不同,但我删除了除了引号内的空格之外的所有空格(例如逗号和=>(。此外,对于可以具有null值的数组列,这些列中的任何单元格都将为null,您必须在单元格中有一个空数组(即{}(才能导入而不会出错。
我还没有尝试用我的应用程序检索这些值,但由于它们现在在我的电子表格中,它们导入时没有出错。
您必须在文本数组中对字符串值进行双引号:{"hello", "world"}
。如果该字段在csv/tsv文件(如"{hello, world}"
(中已经有双引号,则必须转义其中的双引号,例如:在Postgres中导入csv/tsv文件时,如果转义符为,则为
"{"hello", "world"}"
。当使用COPY时,你可以指定你想要的转义符,当使用替代解决方案时,我不知道。