替换PostgreSQL函数中返回SETOF表名的一些列值

时间:2014-09-07 17:49:36

标签: sql postgresql

我在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”之类的函数,我可以在单独的列中返回我想要的数据。同样,我想以某种方式避免列出所有派生列名,因此仍然可以轻松地自动生成函数。

1 个答案:

答案 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;