Не уверен, откуда это взялось.В вопросе отсутствует определение вашей функции.
Но вы можете попробовать функцию plpgsql
вместо sql
.Их возвращаемый тип слегка отличается, когда объявлен как RETURNS void
.Рассмотрим эту демонстрацию:
CREATE OR REPLACE FUNCTION f_sql()
RETURNS void AS
'UPDATE foo SET id = id+1 WHERE id = 34567'
LANGUAGE sql;
CREATE OR REPLACE FUNCTION f_plpgsql()
RETURNS void AS
$$
BEGIN
UPDATE foo SET id = id+1 WHERE id = 34567;
END;
$$ LANGUAGE plpgsql;
Теперь VOID является вымышленным типом.Хотя функция plpgsql фактически возвращает VOID, функция SQL, похоже, возвращает NULL.Я сам не уверен, почему это так.
db=# SELECT f_sql() IS NULL;
?column?
----------
t
db=# SELECT f_plpgsql() IS NULL;
?column?
----------
f