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

function array_agg(text) is not unique when connecting with pgAdmin III

当我使用 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 版本。

我该如何解决这个问题?

我发现问题是由从 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);

在我的例子中,明确地将参数类型转换为 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);

按预期工作,return 相应的 TEXTVARCHAR 数组。