Function Scan

名称

函数扫描算子

介绍

函数扫描算子可以从函数的返回值中获取元组,扫描对象是返回元组集的函数。

举例

--清理环境
DROP FUNCTION fn1(int);
DROP TABLE t1 CASCADE;

--创建环境
CREATE TABLE t1(a int);
INSERT INTO t1 SELECT generate_series(1,10);
ANALYZE t1;

CREATE FUNCTION fn1(num int) RETURN SETOF record AS
DECLARE
    rec t1%rowtype;
BEGIN
    FOR rec in SELECT * FROM t1 WHERE a < num LOOP
        RETURN NEXT rec;
    END LOOP;
    RETURN;
END;
/

EXPLAIN ANALYZE SELECT * FROM fn1(5) AS (a int);
                                                  QUERY PLAN
----------------------------------------------------------------------------------------------------
 Function Scan on FN1  (cost=0.00..12.50 rows=1000 width=4) (actual time=0.47..0.47 rows=4 loops=1)
 Planning Time: 0.04 msec
 Execution Time: 0.53 msec
(3 rows)
  • on FN1 限定条件,扫描算子作用的函数
  • Filter 限定条件,对函数的返回结果进行限定