我在PostgreSQL 9.2中有一个包含许多派生表的基表。对于每个派生表,都有一个返回“SETOF derived_table ”的函数。这些函数是生成的代码,它们不需要知道派生的列名,因为它们只是调用
SELECT *
FROM derived_table
WHERE [some conditions on base columns]
我现在希望函数修改某些基本列的返回值,但继续返回所有派生列,即。像这样的东西:
SELECT 'something else' AS base_col1, base_col2, base_col3, [all derived columns]
FROM derived_table
WHERE ...
有没有办法在Postgres中表达这一点而不列出所有派生列名?
或者,如果只有一种方法可以定义返回“SETOF my_special_column + derived_table”之类的函数,我可以在单独的列中返回我想要的数据。同样,我想以某种方式避免列出所有派生列名,因此仍然可以轻松地自动生成函数。
答案 0 :(得分:1)
如果您创建修改列的视图
create view view_derived_table as
select 'something else' as new_column, *
from derived_table;
然后您可以返回setof
view_derived_table
create function f_view_derived_table()
returns setof view_derived_table as $$
select *
from view_derived_table
where some_condition;
$$ language sql;