错误:函数unnest(integer[])在postgresql中不存在


SELECT UNNEST(ARRAY[1,2,3,4])

在执行上述查询时,我收到如下错误:

ERROR: function unnest(integer[]) does not exist in postgresql.

我正在使用PostgreSQL 8.3,并且我已经在我的数据库中安装了_int.sql包以进行整数数组操作。

如何解决此错误?

unnest()不是模块intarray的一部分,而是标准PostgreSQL的一部分。但是,您需要Postgres 8.4或更高版本。

因此,您可以通过升级到较新版本来解决此问题。请参阅 PostgreSQL 项目的版本控制策略。

这是一个穷人对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函数......

相关内容

  • 没有找到相关文章

最新更新