与pgAdmin III连接时,函数array_agg(text)不是唯一的

时间:2017-12-15 14:39:44

标签: postgresql pgadmin

当我使用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版本的数据库。

如何解决此问题?

2 个答案:

答案 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)

就我而言,将参数显式转换为 TEXTVARCHAR 有效。

例如,

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);

按预期工作并返回相应的 TEXTVARCHAR 数组。