首页 文章

Postgresql函数中的列命名

提问于
浏览
2

我想创建一个PSQL函数,它返回一个像result的表 . 我的函数定义如下所示:

create or replace function myfunc1() 
   returns table(id varchar(50), title varchar(50)) 
as $$ 
begin 
   return query select id, title from books; 
end; 
$$ language plpgsql;

但是,当我调用该函数时,我收到此错误:

错误:列引用“id”不明确第1行:选择id,书籍中的 Headers ^ DETAIL:它可以引用PL / pgSQL变量或表列 .

显然,这是因为我在返回表和目标表中都使用了列名'id' . 最简单的解决方案是更改列名称 . 但我在这里寻找一种让我使用我想要的列名的方法 . 此外,更改名称会使我的代码变得怪异,而其他人难以理解 .

3 回答

  • 0

    通过限定列名来消除歧义:

    create or replace function myfunc1()
      returns table(id varchar(50), title varchar(50)) as
    $$
      select books.id, books.title from books;
    $$ language sql stable;
    
  • 3

    SELECT books.id, title FROM books

  • 1

    ... returns table(id varchar(50), title varchar(50)) ... 函数定义的一部分只是another way to define OUT parameters . 所以现在你有两个名为 idtitle 的OUT参数和两个列(来自 book 表)你引用命名...是的,你猜对了 - idtitle .

    避免这种歧义的一种方法是在函数定义中重命名返回表的列名:

    CREATE OR REPLACE FUNCTION myfunc1() RETURNS TABLE(p_id VARCHAR(50), p_title VARCHAR(50)) AS $_$
    BEGIN
      RETURN QUERY SELECT id, title FROM books;
    END;
    $_$ LANGUAGE plpgsql;
    

相关问题