PostgreSQL插入regoper类型报错:存在多个名为+的运算符
问题原因及解决方法
错误根源
插入语句中col_regoper字段的值'+'无法唯一匹配到对应运算符。PostgreSQL中存在多个同名的+运算符,分别对应不同数据类型(如整数、数值、字符串、日期等),仅用运算符名称无法让数据库定位到具体的运算符实例,因此抛出ERROR: more than one operator named +错误。
解决办法
需要给运算符名称添加参数类型签名,让数据库能唯一识别目标运算符。例如:
- 若要指定整数类型的加法运算符,将
'+'改为'+(integer,integer)' - 也可加上命名空间进一步明确,比如
'pg_catalog.+(integer,integer)'
修改后的插入语句对应字段部分示例:
INSERT INTO public.objectidentifiers VALUES (1, 564182, 'pg_type', '"POSIX"', 'english', 'simple', 'pg_catalog', '+(integer,integer)', -- 替换为带类型签名的运算符标识 '*(integer,integer)', '"SRC"."area_equal_procedure"', 'sum(int4)', 'postgres', 'integer' );
补充说明:regoper类型存储的是运算符的对象标识符,要求输入的字符串必须能唯一匹配系统中的一个运算符,模糊的名称会导致歧义。
内容的提问来源于stack exchange,提问作者aditya_1225
相关产品推荐
相关产品推荐

