如何格式化CSV/TSV文件中的文本数组和hstore数据以导入Postgres



我正试图从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时,你可以指定你想要的转义符,当使用替代解决方案时,我不知道。

相关内容

  • 没有找到相关文章

最新更新