Если я создам функцию f
, которая запрашивает функцию, я думаю, что ее будет легче читать, если возвращаемый тип будет именем таблицы, а не RETURNS TABLE(id integer, name text)
.
CREATE TABLE users ( id integer, name text );
CREATE OR REPLACE FUNCTION f()
RETURNS users
AS $$
SELECT * FROM users
WHERE FALSE
$$
LANGUAGE SQL;
Но я получаю странные результаты, когда запрос в функции возвращает нулевые строки.
SELECT * FROM f();
Ожидаемый результат
+------+--------+
| id | name |
|------+--------|
+------+--------+
Фактический результат
+--------+--------+
| id | name |
|--------+--------|
| <null> | <null> |
+--------+--------+
Если столбцов больше, они все равно будут null
. Если запрос в функции возвращает какие-либо строки, то он работает так, как ожидалось. Я не получаю такого поведения, если использую синтаксис RETURNS TABLE(...)
.
Есть ли способ обойти это?
Я использую PostgreSQL 9.6.