SQL function return-type: TABLE vs SETOF records

后端 未结 2 2010
清酒与你
清酒与你 2020-12-16 10:35

What\'s the difference between a function that returns TABLE vs SETOF records, all else equal.

CREATE FUNCTION events_by_type_1(tex         


        
2条回答
  •  粉色の甜心
    2020-12-16 10:54

    This answer is only to remember alternative context where TABLE and SETOF are equivalent.

    As @a_horse_with_no_name pointed, it is not a RETURNS SETOF "unknown record", is a defined one.


    In this example, the types table and setof are equivalent,

    CREATE TYPE footype AS (score int, term text);
    
    CREATE FUNCTION foo() RETURNS SETOF footype AS $$
       SELECT * FROM ( VALUES (1,'hello!'), (2,'Bye') ) t;
    $$ language SQL immutable;
    
    CREATE FUNCTION foo_tab() RETURNS TABLE (score int, term text) AS $$
       SELECT * FROM ( VALUES (1,'hello!'), (2,'Bye') ) t;
    $$ language SQL immutable;
    
    SELECT * FROM foo();      -- works fine!
    SELECT * FROM foo_tab();  -- works fine and is equivalent.
    

    The RETURNS SETOF have the advantage of reuse type (see footype), that is impossible with RETURNS TABLE.

提交回复
热议问题