当我使用pgAdmin III(1.22.2)连接到PostgreSQL数据库时,出现此错误:
ERROR: function array_agg(text) is not unique
LINE 5: (SELECT array_agg(label) FROM pg_shseclabel sl1 WHERE sl1.ob...
^
HINT: Could not choose a best candidate function. You might need to add explicit type casts.
数据库服务器是PostgreSQL 9.6。
pgAdmin的相同实例适用于运行PostgreSQL 9.0版本的数据库。
如何解决此问题?
答案 0 :(得分:6)
我发现问题是由9.0迁移到9.6造成的。
使用psql登录数据库并运行\df array_agg
。这是它应该在9.0中的样子:
db=# \df array_agg
List of functions
Schema | Name | Result data type | Argument data types | Type
------------+-----------+------------------+---------------------+------
pg_catalog | array_agg | anyarray | anyelement | agg
(1 row)
和9.6:
db=# \df array_agg
List of functions
Schema | Name | Result data type | Argument data types | Type
------------+-----------+------------------+---------------------+------
pg_catalog | array_agg | anyarray | anyarray | agg
pg_catalog | array_agg | anyarray | anynonarray | agg
(2 rows)
但是,当我在服务器上运行\df array_agg
时,我得到:
db=> \df array_agg
Lista funkcji
Schemat | Nazwa | Typ danych wyniku | Typy danych argumentów | Typ
------------+-----------+-------------------+------------------------+-------
pg_catalog | array_agg | anyarray | anyarray | agreg
pg_catalog | array_agg | anyarray | anynonarray | agreg
public | array_agg | anyarray | anyelement | agreg
(3 rows)
如上所述here,可以通过以下方式解决:
DROP AGGREGATE public.array_agg(anyelement);
答案 1 :(得分:0)
就我而言,将参数显式转换为 TEXT
或 VARCHAR
有效。
例如,
SELECT array_agg('Group1');
结果:
ERROR: function array_agg(unknown) is not unique LINE 1: SELECT array_agg('Group1'); ^ HINT: Could not choose a best candidate function. You might need to add explicit type casts. SQL state: 42725 Character: 8
然而,两者
SELECT array_agg('Group1'::VARCHAR);
和
SELECT array_agg('Group1'::TEXT);
按预期工作并返回相应的 TEXT
或 VARCHAR
数组。