Создайте логическую функцию Postgres, которая обрабатывает нули - PullRequest
0 голосов
/ 28 июня 2019

Я пытаюсь создать функцию, которая будет приводить логические значения к 't' или 'f', или '', если NULL.

CREATE OR REPLACE FUNCTION bool(b BOOLEAN) RETURNS VARCHAR
AS $$
BEGIN
IF b IS NULL THEN 
    RETURN ''; 
END IF;
IF b THEN 
    RETURN 't'; 
ELSE
    RETURN 'f';
END IF;
END; 
$$ LANGUAGE PLPGSQL CALLED ON NULL INPUT;

Однако следующее всегда возвращает NULL.Что дает?

SELECT bool(NULL)

1 Ответ

1 голос
/ 28 июня 2019

bool также является встроенной функцией и приведением типа (поскольку существует тип данных с таким именем).

Вам необходимо либо явно ссылаться на свою функцию, добавив к ней префикс схемы:

select public.bool(null);

или дайте вашей функции другое имя.


Не связано, но: ваша функция может быть упрощена до:

CREATE OR REPLACE FUNCTION bool(b BOOLEAN) 
  RETURNS VARCHAR
AS $$  
  select coalesce(case when b then 't' else 'f' end, '');
$$
language sql
called on null input;
...