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
相关产品推荐
相关产品推荐

