You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PostgreSQL使用自定义类型执行INSERT时出现语法错误求助

PostgreSQL自定义类型插入报错解决方法

你遇到的问题是因为使用了JSON风格的语法输入复合类型值,但PostgreSQL的复合类型有自己的输入格式规则,以下是几种正确的插入方式:

方式一:使用复合类型原生字符串格式

PostgreSQL复合类型的字符串输入需要用圆括号包裹,键与值之间用=分隔,字符串值用双引号包裹(若包含特殊字符)。修正后的INSERT语句:

INSERT INTO "foos" ("bar") VALUES ('(amount=0,display="0")') RETURNING *;

方式二:使用ROW构造器

通过ROW()函数构造复合类型值,再显式转换为foo类型,无需手动处理字符串格式:

INSERT INTO "foos" ("bar") VALUES (ROW(0, '0')::foo) RETURNING *;

注意:ROW()内的参数顺序必须和自定义类型foo的字段定义顺序(amount在前,display在后)一致。

方式三:使用类型构造函数

PostgreSQL会为自定义复合类型自动生成同名构造函数,直接传入字段值即可:

INSERT INTO "foos" ("bar") VALUES (foo(0, '0')) RETURNING *;

这种方式最直观,无需担心格式转义问题,参数顺序同样要匹配类型定义的字段顺序。

补充说明

如果display字段的值包含逗号、双引号等特殊字符,使用字符串格式时需要手动转义(比如值为a"b,c要写成'(amount=123,display="a\"b,c")'),而ROW构造器和类型构造函数则无需手动转义,使用起来更安全。

内容的提问来源于stack exchange,提问作者benhowdle89

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 10:30:49