与 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);
在我的例子中,明确地将参数类型转换为 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);
按预期工作,return 相应的 TEXT
或 VARCHAR
数组。
当我使用 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);
在我的例子中,明确地将参数类型转换为 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);
按预期工作,return 相应的 TEXT
或 VARCHAR
数组。