如何从需要 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;