如何在CSV/TSV文件中格式化text array和hstore数据以导入Postgres
Postgres TSV导入text array与hstore语法规范
错误原因对应
- 报错
ERROR: Syntax error near '}' at position 667:hstore格式多了外层不必要的{} - 报错
ERROR: malformed array literal: "" Detail: Array value must start with "{" or dimension information.:array字段传入了空字符串,不符合array字面量要求
text array 语法要求
- 基础格式:必须用
{}包裹所有元素,元素包含空格、逗号、双引号等特殊字符时,必须用双引号括起。你当前使用的{hello, world}包含空格,正确写法为{hello,"world"},所有元素统一加双引号{"hello","world"}兼容性更高。 - 空值处理:空数组填
{},字段为NULL时明确填NULL,禁止填空字符串。 - 转义规则:元素本身包含双引号时,用两个双引号转义,示例:元素为
test "abc",对应array写法为{"test ""abc"""}。
hstore 语法要求
- 基础格式:不要在外层加
{},键必须用双引号包裹,值为字符串时也用双引号包裹,=>前后不要留多余空格。你当前使用的{"hello" => "world", "goodbye" => "world"}格式错误,正确写法为"hello"=>"world","goodbye"=>"world"。 - 空值处理:空hstore填
'',字段为NULL时填NULL。 - 转义规则:值包含双引号时用两个双引号转义,示例:值为
say "hi",对应写法为"greet"=>"say ""hi"""。
TSV导入工具适配(Goland/Postico 2)
- 整个array/hstore字段如果包含制表符、换行符,需要用双引号把整段字面量括起来,避免工具误拆分字段。
- 导入向导中确认字段类型映射:array字段对应
text[],hstore字段对应hstore,不要使用默认字符串类型。 - Postico 2导入时开启「将字符串字面量解析为Postgres类型」选项;Goland数据库导入向导中勾选「使用Postgres语法解析复杂类型」。
内容的提问来源于stack exchange,提问作者eggroll
相关产品推荐
相关产品推荐

