postgresql 9.1.3:“;“运算符不唯一”;问题

postgresql 9.1.3:“;“运算符不唯一”;问题,postgresql,Postgresql,考虑以下查询错误: db=# select 'test' || 123; ERROR: operator is not unique: unknown || integer LINE 1: select 'test' || 123; ^ HINT: Could not choose a best candidate operator. You might need to add explicit type casts. db=# select '

考虑以下查询错误:

db=# select 'test' || 123;
ERROR:  operator is not unique: unknown || integer
LINE 1: select 'test' || 123;
                      ^
HINT:  Could not choose a best candidate operator. You might need to add explicit type casts.

db=# select 'test'::text || 123;
ERROR:  operator is not unique: text || integer
LINE 1: select 'test'::text || 123;
                            ^
HINT:  Could not choose a best candidate operator. You might need to add explicit type casts.
现在,在PGAdmin中,在DB的“我的强制转换”节点中,我定义了13个,其中一个是:

CREATE CAST (integer AS text)
  WITH FUNCTION text(integer)
  AS IMPLICIT;
当我们转到第9.1页时,我按照以下步骤重新创建了隐式类型转换

我想知道我是否真的创建了重复运算符,如果是,我应该如何着手清理它?如果不是,为什么我会出现这种错误?这似乎是一个相当直截了当的演员阵容


谢谢

我尝试添加相同的强制类型,但它在9.1.2中给出了相同的错误。我还注意到该博客上的第一条评论(日期为2009年2月24日)报告了这一错误

这可能与手册中的以下注释有关:

注意:在PostgreSQL 8.3之前,由于存在从这些数据类型到文本的隐式强制,这些函数也会静默地接受一些非字符串数据类型的值。这些强制措施之所以被取消,是因为它们经常导致令人惊讶的行为但是,字符串连接运算符(| |)仍然接受非字符串输入,只要至少有一个输入是字符串类型

我认为您通过添加隐式强制转换创建了一个重复操作符。整数可以转换为文本并使用
text | text
或不使用
text | integer
。查看表格,我认为第二个可能是不能删除的
text | | anynonarray


简言之,解决这一问题的唯一方法是在使用| |运算符时使用显式强制转换删除您创建的隐式强制转换,并在其他任何地方使用显式强制转换。

面临着同样的问题,要解决一个错误,我必须添加那些旧的隐式强制转换,但这会在其他地方导致错误,如-SELECT 1 | |“/%”;查询将抛出not unique运算符错误,我不得不将整数作为文本类型删除。

选择“测试”| 123;不正确,您正在尝试合并文本和整数,请选择“测试”::text | | 123;不正确,您正在尝试将文本强制转换为文本,然后使用整数进行concat,您需要做的是:选择“test”| 123::text;这管用!明确始终是最佳做法。是否仍有删除运算符| |(text,anynonarray)的方法?我只是无法将显式强制转换用于数百个查询。我绑定了这个,但它是内置的,不能更改或删除。