\c test_part0 create function test_table1(out id int4, out data text, out data2 text, out data3 text) as $$ begin id = 1; data = 'Data1'; data2 = 'Data2'; data3 = 'Data3'; return; end; $$ language plpgsql; select * from test_table1(); id | data | data2 | data3 ----+-------+-------+------- 1 | Data1 | Data2 | Data3 (1 row) \c regression create table ret_table ( id int4, data text ); create function test_table1() returns ret_table as $$ cluster 'testcluster'; run on 0; $$ language plproxy; select * from test_table1(); id | data ----+------- 1 | Data1 (1 row) -- add column alter table ret_table add column data2 text; select * from test_table1(); id | data | data2 ----+-------+------- 1 | Data1 | Data2 (1 row) \c regression select * from test_table1(); id | data | data2 ----+-------+------- 1 | Data1 | Data2 (1 row) -- drop & add alter table ret_table drop column data2; alter table ret_table add column data3 text; select * from test_table1(); id | data | data3 ----+-------+------- 1 | Data1 | Data3 (1 row) \c regression select * from test_table1(); id | data | data3 ----+-------+------- 1 | Data1 | Data3 (1 row) -- drop alter table ret_table drop column data3; select * from test_table1(); id | data ----+------- 1 | Data1 (1 row) \c regression select * from test_table1(); id | data ----+------- 1 | Data1 (1 row) -- add again alter table ret_table add column data3 text; alter table ret_table add column data2 text; select * from test_table1(); id | data | data3 | data2 ----+-------+-------+------- 1 | Data1 | Data3 | Data2 (1 row) \c regression select * from test_table1(); id | data | data3 | data2 ----+-------+-------+------- 1 | Data1 | Data3 | Data2 (1 row)