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

PostgreSQL向对象类型列插入数据失败,报错42601

解决PostgreSQL自定义类型插入语法错误问题

错误原因

原插入语句的语法不符合PostgreSQL自定义复合类型的构造规则:

  • 构造自定义复合类型不能直接用类型名 [数组元素]的格式
  • 自定义类型dbobj_vry中的a字段是character varying[]类型,需要正确构造字符串数组

正确插入方式

以下几种方式都可以实现正确插入:

方式1:使用ROW构造函数

INSERT INTO calender VALUES ('1', ROW(ARRAY['9', '5'])::dbobj_vry);
  • ROW()用于构造复合类型实例,参数对应自定义类型的字段(这里仅a字段)
  • ARRAY['9', '5']构造符合character varying[]类型的数组,显式使用字符串元素避免类型转换问题

方式2:使用复合类型字面量强制转换

INSERT INTO calender VALUES ('1', '({"9","5"})'::dbobj_vry);
  • 用字符串表示复合类型实例,格式为(数组值),数组内部用大括号包裹字符串元素
  • 通过::dbobj_vry强制转换为目标自定义类型

方式3:指定字段名插入(更清晰)

INSERT INTO calender (day_name, day_date)
VALUES ('1', (ARRAY['9', '5'])::dbobj_vry);
  • 明确指定字段名,避免因表结构变化导致的插入错误
  • 直接将构造好的数组强制转换为dbobj_vry类型(PostgreSQL会自动匹配复合类型的字段)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 01:18:15