Как CAST пустое значение массива ANYARRAY-функции в ANYARRAY? - PullRequest
0 голосов
/ 10 мая 2018

Я использую pgv10.Мне кажется, что эта функция неправильная функция:

CREATE FUNCTION array_coalesce(ANYARRAY) RETURNS ANYARRAY AS $f$
  SELECT CASE WHEN $1 IS NULL THEN array[]::ANYARRAY ELSE $1 END;
$f$ language SQL IMMUTABLE;

Любопытство

... Я начал упрощать комплекспроблема, и приходит в тесте select coalesce(null::text[], array[]::text[]), что не работал ... Так что это был хороший вопрос, как это реализовать?Но извините, я что-то работаю, COALESCE (массив, массив) работает нормально (фу!).

Таким образом, "проблема слияния" является просто иллюстративной / диатической.Что я действительно хочу понять здесь: Как использовать ANYARRAY?


PS: другое любопытство, строка concat(), || и другие операторы конкатенации в PostgreSQL делают некоторое "объединение",

 select concat(NULL::text, 'Hello', NULL::text); -- 'Hello'
 select null::text[] || array[]::text[]; -- []
 select array[]::text[] || null::text[]; -- []

1 Ответ

0 голосов
/ 11 мая 2018

Как использовать anyarray?

Это интересный вопрос в контексте использования, описанного в вопросе.Единственный способ, который я знаю, это использовать аргумент в качестве переменной.Это возможно в функции plpgsql (не в простой sql):

create or replace function array_coalesce(anyarray) 
returns anyarray as $f$
begin
    if $1 is null then
        select '{}' into $1;
    end if;
    return $1;
end 
$f$ language plpgsql immutable;

select array_coalesce(null::int[]);

 array_coalesce 
----------------
 {}
(1 row)

Кстати, вы можете просто использовать coalesce() для массивов:

select coalesce(null::text[], '{}'::text[]);

 coalesce 
----------
 {}
(1 row) 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...