函数不是 returning table 尽管它是 return 类型

Function not returning table despite it being the return type

这是我的函数:

create or replace function like(likerId uuid, likeeId uuid)
returns table(is_matched bool, created_notification bool)
language plpgsql
as $$
    declare
        performed_like bool := (select swipeIfDifferent(likerId, likeeId, 'like'));
        liker_name text := (SELECT every_user.username from every_user where every_user_.id=likerId);
        is_matched bool := (
            SELECT EXISTS (
                SELECT 1 from user_like_or_dislike where
                user_like_or_dislike.owning_user_id=likeeId AND
                user_like_or_dislike.subject_user_id=likerId AND
                user_like_or_dislike.like_or_dislike='like'
            )
        );
    begin
        if performed_like then
            insert into notification (owning_user_id, subject_user_id, notification_kind_id, message, timestamp) values (likeeId, likerId, 2, liker_name + ' liked you!', current_timestamp);
        end if;
        return query select is_matched, performed_like;
    end;
$$;

每当我执行它时,无论我使用 select * from like(...); 还是 select like(...); 它总是输出以下内容:

 like 
------
 f
(1 row)

此外,'like' 似乎也从未执行过(定义 performed_like 变量时函数调用 swipeIfDifferent(...))。 swipfIfDifferent(...) 的 return 类型是 bool.

将数据库对象命名为与系统函数相同的名称是个坏主意。当你认为你正在调用你的函数时,你实际上不能保证数据库会真正调用它。这是您的案例中实际调用的内容。

因此,将您的函数重命名为 user_func_like,错误就会消失。或者指定架构名称,如 user_schema.like(x,y)。但最好使用 non-system names