如何从需要 table 作为参数的 Postgresql 函数中 select
How to select from a Postgresql function that requires a table as argument
我有一个函数需要 table 作为输入,并且 return 与 table 相同。
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()
但是,此函数还需要一个 table 作为参数。因此,我总是这样称呼它:
SELECT func (t) FROM "table" AS t WHERE id = 1;
但它 return编辑了一个列
(1,NULL,NULL,SOMERANDOMTEXT,"2021-09-17 20:23:22.788179+00")
如何使 SELECT return 单独的列而不是单个 func
列?
这对我有用:
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;
我有一个函数需要 table 作为输入,并且 return 与 table 相同。
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()
但是,此函数还需要一个 table 作为参数。因此,我总是这样称呼它:
SELECT func (t) FROM "table" AS t WHERE id = 1;
但它 return编辑了一个列
(1,NULL,NULL,SOMERANDOMTEXT,"2021-09-17 20:23:22.788179+00")
如何使 SELECT return 单独的列而不是单个 func
列?
这对我有用:
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;