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

How do I format text array and hstore data in a CSV/TSV file for importing into Postgres

我正在尝试将文本数组和 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 电子表格中以便导入 Postgres?

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

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

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

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

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

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

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

我还没有尝试用我的应用程序检索这些值,但由于它们现在在我的电子表格中,所以它们可以正确导入。