#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;