Как выбрать из функции Postgresql, для которой в качестве аргумента требуется таблица

#sql #postgresql #postgresql-13

Вопрос:

У меня есть функция, которая требует таблицу в качестве входных данных и возвращает ту же таблицу.

 CREATE TABLE tab1
    (`id` int, `a` int, `b` int, `c` varchar(16), `timestamp` datetime)
;

CREATE OR REPLACE FUNCTION func(sp "tab1")
    RETURNS TABLE (
        LIKE "tab1")
    LANGUAGE 'plpython3u'
    AS [...];
 

Я хочу назвать это примерно так:

 SELECT * from func()
 

Однако для этой функции также требуется таблица в качестве аргумента. Из-за этого я всегда называл это так:

 SELECT func (t) FROM "table" AS t WHERE id = 1;
 

но он вернул одну колонку с
(1,NULL,NULL,SOMERANDOMTEXT,"2021-09-17 20:23:22.788179 00")

Как я могу заставить SELECT возвращать отдельные столбцы вместо одного func столбца?

Ответ №1:

Эта работа для меня:

 SELECT (func(t.*)).* FROM tab1 AS t WHERE t.id = 1
 

Вы LATERAL JOIN тоже могли бы использовать:

 SELECT t.*
FROM tab1,
      LATERAL func(tab1) AS t
WHERE tab1.id = 1;