postgres 表函数

问题描述 投票:0回答:1

您好,我对 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
                      );
  1. 这个特定的嵌套
    SELECT
    语句(包括微妙的事情)与
    SELECT * FROM foo
    有何不同?这个特定的声明有什么用?
  2. getfoo(foo.fooid)
    如何知道
    foo.fooid
    的值?当我们传入像
    table.column
    这样的参数时,函数是否总是迭代所有值?

谢谢

sql postgresql syntax
1个回答
0
投票
  1. 该查询没有执行任何有用的操作并返回所有表行。这只是一个例子。

  2. 将为表的每一行调用该函数。您可以使用

    EXPLAIN
    查看 PostgreSQL 如何处理查询。

© www.soinside.com 2019 - 2024. All rights reserved.