您好,我对 PostgreSQL 中的表函数有一些疑问
来自 https://www.postgresql.org/docs/16/queries-table-expressions.html#QUERIES-TABLEFUNCTIONS
CREATE TABLE foo (fooid int, foosubid int, fooname text);
CREATE FUNCTION getfoo(int) RETURNS SETOF foo AS $$
SELECT * FROM foo WHERE fooid = $1;
$$ LANGUAGE SQL;
SELECT * FROM foo
WHERE foosubid IN (
SELECT foosubid
FROM getfoo(foo.fooid) z
WHERE z.fooid = foo.fooid
);
SELECT
语句(包括微妙的事情)与 SELECT * FROM foo
有何不同?这个特定的声明有什么用?getfoo(foo.fooid)
如何知道foo.fooid
的值?当我们传入像 table.column
这样的参数时,函数是否总是迭代所有值?谢谢
该查询没有执行任何有用的操作并返回所有表行。这只是一个例子。
将为表的每一行调用该函数。您可以使用
EXPLAIN
查看 PostgreSQL 如何处理查询。