创建函数时如何return列与原始table同名?

How to return columns with the same name as original table when creating function?

所以我有这个功能:

create function report (varchar)
returns table (
        id bigint,
        src_data_system_id int8
)
language plpgsql
as $$
begin
    return query
        select id, src_data_system_id from process_log_objects plo 
        where src_data_system_name = 'somecondition'||;
end $$

如果在 returns 块中我在函数体中使用与 select 查询中相同的列名,那么当我这样做时 select * from report('dict_day'); 我得到一个错误

 ERROR: column reference "id" is ambiguous
  Detail: It could refer to either a PL/pgSQL variable or a table column.

如何 return 来自该查询的原始列名?

谢谢!

您必须使用 table 名称限定列:

RETURN QUERY
    SELECT plo.id, plo.src_data_system_id FROM process_log_objects plo
    ...

为避免此类问题,为函数使用不同的参数名称是一种很好的风格。