SELECT UNNEST(ARRAY[1,2,3,4])
在执行上面的查询时,我得到了这样的错误:
ERROR: function unnest(integer[]) does not exist in postgresql.
我正在使用 PostgreSQL 8.3 并且我已经在我的数据库中安装了 _int.sql
包以进行整数数组操作。
如何解决这个错误?
最佳答案
unnest()
不是模块 intarray
的一部分,而是标准 PostgreSQL 的一部分。然而,你need Postgres 8.4 or later为此。
所以你可以通过升级到更新的版本来解决这个问题。查看versioning policy of the PostgreSQL project .
这是 Postgres 8.4 的穷人 unnest()
:
CREATE OR REPLACE FUNCTION unnest(anyarray)
RETURNS SETOF anyelement
LANGUAGE sql IMMUTABLE AS
'SELECT $1[i] FROM generate_series(array_lower($1,1), array_upper($1,1)) i';
仅适用于一维数组 - 与现代 unnest()
不同,它也接受多维:
SELECT unnest('{1,2,3,4}'::int[]) -- works
SELECT unnest('{{1,2},{3,4},{5,6}}'::int[]) -- fails (returns all NULLs)
您可以为 n 维数组实现更多功能:
CREATE OR REPLACE FUNCTION unnest2(anyarray) -- for 2-dimensional arrays
RETURNS SETOF anyelement
LANGUAGE sql IMMUTABLE AS
$func$
SELECT $1[i][j]
FROM (
SELECT i, generate_series(array_lower($1,2), array_upper($1,2)) AS j
FROM generate_series(array_lower($1,1), array_upper($1,1)) i
) sub;
$func$;
调用:
SELECT unnest2('{{1,2},{3,4},{5,6}}'::int[]) -- works
您还可以编写处理多个维度的 PL/pgSQL 函数......
关于postgresql - 错误 : function unnest(integer[]) does not exist in postgresql,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8830517/