将 NULL 数组填充到自定义聚合函数的最大长度 - 无 array_fill 函数
Pad arrays with NULL to maximum length for custom aggregate function - no array_fill function
这几乎是与 Pad arrays with NULL to maximum length for custom aggregate function 相同的问题。所提供答案的唯一问题是函数 array_fill 在 Postgres 8.2 中不存在。
根据我的版本,我怎样才能让它可用?
这应该有效:
CREATE TEMP TABLE t AS (SELECT arr::text[] FROM UNNEST('{"{1}","{}","{a,b,c}"}'::text[]) arr);
SELECT COALESCE(NULLIF(arr || nulls[1:max-(1+array_upper(arr, 1)-array_lower(arr, 1))], '{}'), nulls[1:max])
FROM t,
(SELECT ARRAY(SELECT NULL::text FROM generate_series(1, 100)) AS nulls) a,
(SELECT 1 + max(array_upper(arr, 1)-array_lower(arr, 1)) AS max FROM t) m
do $$
declare
arr int[] := array[1,2,3];
begin
raise info '%', arr;
arr[1] := coalesce(arr[1]); -- Set lower bound if array is null
arr[10] := coalesce(arr[10]); -- Set upper bound
raise info '%', arr;
end $$;
输出:
INFO: {1,2,3}
INFO: {1,2,3,NULL,NULL,NULL,NULL,NULL,NULL,NULL}
不是一个完整的答案,但很容易将其转换为函数。
免责声明:在 PostgreSQL 9.5 上测试
这几乎是与 Pad arrays with NULL to maximum length for custom aggregate function 相同的问题。所提供答案的唯一问题是函数 array_fill 在 Postgres 8.2 中不存在。
根据我的版本,我怎样才能让它可用?
这应该有效:
CREATE TEMP TABLE t AS (SELECT arr::text[] FROM UNNEST('{"{1}","{}","{a,b,c}"}'::text[]) arr);
SELECT COALESCE(NULLIF(arr || nulls[1:max-(1+array_upper(arr, 1)-array_lower(arr, 1))], '{}'), nulls[1:max])
FROM t,
(SELECT ARRAY(SELECT NULL::text FROM generate_series(1, 100)) AS nulls) a,
(SELECT 1 + max(array_upper(arr, 1)-array_lower(arr, 1)) AS max FROM t) m
do $$
declare
arr int[] := array[1,2,3];
begin
raise info '%', arr;
arr[1] := coalesce(arr[1]); -- Set lower bound if array is null
arr[10] := coalesce(arr[10]); -- Set upper bound
raise info '%', arr;
end $$;
输出:
INFO: {1,2,3}
INFO: {1,2,3,NULL,NULL,NULL,NULL,NULL,NULL,NULL}
不是一个完整的答案,但很容易将其转换为函数。
免责声明:在 PostgreSQL 9.5 上测试