這是我的功能:
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)
此外,似乎也從未執行過“喜歡”(swipeIfDifferent(...)定義performed_like變數時的函式呼叫)。的回傳型別swipfIfDifferent(...)是bool。
uj5u.com熱心網友回復:
將資料庫物件命名為與系統函式相同的名稱是個壞主意。當你認為你正在呼叫你的函式時,你實際上并不能保證資料庫會真正呼叫它。在您的情況下,這實際上是所謂的。

因此,將您的函式重命名,例如改名為 user_func_like,錯誤就會消失。或指定模式名稱,如user_schema.like(x,y)。但最好使用非系統名稱
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/483033.html
標籤:PostgreSQL
