postgres 函数丢失列名

postgres functions loses column names

我在 PgAdmin 查询工具中创建了一个函数,return是一个 table 具有单列的函数:

create or replace function test_function()
  returns table(a integer) as
...

当我 运行 查询时,我收到一条成功消息并且可以看到添加到列表中的函数,但定义存储为:

create or replace function test_function()
  returns setof integer as
...

这似乎只发生在单列 return 上。这给我带来了问题,因为如果我想创建一个像这样的语句:

select t.a from test_function();

我不能,列名采用奇怪的名称,我收到一条错误消息,指出 return 类型没有 a 列。我怎样才能强制这个 return a table?

这是 pgAdmin 中的错误(已报告 here)。

函数定义在您首次创建时已正确存储。 pgAdmin 显示不正确,但对该函数的调用仍应按预期运行。

只有当您使用 pgAdmin 的 CREATE OR REPLACE 语句并 运行 时才会出现问题。重新创建似乎成功,但由于缺少变量声明,函数将在 运行 时失败。

只要记得在每次重新创建函数时修复 return 类型,就不会有问题。