postgresql - Function returns table based on other function's returned data -


i have function defined as:

create or replace function func_1() returns table (     column_1 text,     column_2 text,     -- large number of other returned columns     -- ... ) $$ begin     -- done here end; $$ language plpgsql; 

is possible declare func_2, use same returned table structure func_1 (data returned func_1 used internally func_2)?

of course, copy , paste declaration, if changes in table structure returned func_1 have manually keep func_2 in sync. 1 way refactor func_1 return composite type , make func_2 return same type - possible keep using returns table , make function depend on "seamlessly"?

as @joshua pointed out above, can set dependency between these functions exploiting fact every table , view comes free composite type:

create function f() returns table (x int) language sql 'values (1)'; create view v select * f(); create function g() returns setof v language sql 'values (2)'; 

g() depends on return type of f(). though if hoping change return type of f() , have propagate through, you're out of luck:

create or replace function f() returns table (x int, y int) language sql 'values (3,3)'; 

error: cannot change return type of existing function

hint: use drop function f() first.

and then, of course:

drop function f(); 

error: cannot drop function f() because other objects depend on it

detail: view v depends on function f()

function g() depends on type v

hint: use drop ... cascade drop dependent objects too.

if want redefine function return without dropping completely, think you're going need create composite type.


Comments

Popular posts from this blog

java - Run spring boot application error: Cannot instantiate interface org.springframework.context.ApplicationListener -

reactjs - React router and this.props.children - how to pass state to this.props.children -

Excel VBA "Microsoft Windows Common Controls 6.0 (SP6)" Location Changes -