我在PgAdmin查询工具中创建了一个函数,该函数返回一个包含单列的表:
create or replace function test_function()
returns table(a integer) as
...
当我运行查询时,我收到一条成功消息,可以看到添加到列表中的函数,但定义存储为:
create or replace function test_function()
returns setof integer as
...
这似乎只发生在单列返回上。它引起了我的问题,因为如果我想创建一个如下语句:
select t.a from test_function();
我不能,列名采用奇怪的名称,我收到一条错误消息,表明返回类型没有列a。我怎么强迫它返回一张桌子呢?
答案 0 :(得分:1)
这是pgAdmin中的错误(报告here)。
首次创建时,函数定义会正确存储。 pgAdmin显示不正确,但对该函数的调用仍应按预期运行。
只有在您使用pgAdmin的CREATE OR REPLACE
语句并运行它时才会出现此问题。重新创建似乎成功,但由于缺少变量声明,该函数将在运行时失败。
只要你记得每次重新创建函数时都修复返回类型,就不应该有问题。