我有两个表,feedback
和quests
。feedback
表格:
create table
public.feedback (
id bigint generated by default as identity,
created_at timestamp with time zone not null default now(),
user_id uuid null,
quest bigint null,
comment text null,
rating numeric null,
constraint feedback_pkey primary key (id),
constraint feedback_quest_fkey foreign key (quest) references quests (id) on delete cascade,
constraint feedback_user_id_fkey foreign key (user_id) references profile (id) on delete cascade
) tablespace pg_default;
create trigger update_quest_data_on_feedback before insert on feedback for each row
execute function update_quest_data ();
create trigger insert_feedback_duplicate before insert on feedback for each row
execute function check_duplicate_feedback ();
字符串quests
表格:
create table
public.quests (
id bigint generated by default as identity,
name text null,
description text null,
city text null,
cover text null,
created_at timestamp with time zone not null default now(),
price numeric null,
total_reviews numeric null,
total_score numeric null,
rating numeric(5, 2) null,
duration numeric null,
players text null,
constraint quests_pkey primary key (id)
) tablespace pg_default;
型
我在INSERT
上的表feedback
上有一个触发器,在事件发生之前,每个行都有一个触发器。
BEGIN
UPDATE quests
SET total_reviews = total_reviews + 1,
total_score = total_score + NEW.rating
WHERE id = NEW.quest;
RETURN NEW;
END;
型
函数返回触发器。
这意味着,每次我向feedback
添加一个新行时,函数必须更新quests
的数据,total_reviews
必须为+1,total_score
必须为total_score
+ NEW.rating
(这是用户发送的评级),其中id等于NEW.quest。
但是有一个问题。如果我在用户发送反馈时通过客户端JS查询在feedback
中添加新行,supabase会在feedback
中添加新行,但不更新任务等级。但是如果我通过supabase站点在feedback
中添加新行,supabase会自行在feedback
中添加新行,并更新任务等级。我不知道为什么。请帮帮忙。
1条答案
按热度按时间7z5jn7bk1#
这个问题的解决方法是将
UPDATE
RLS策略添加到表quests
中。我只是忘记了。当你在
feedback
中添加一个新行时,更新功能是工作的,因为它是通过管理员权限触发的。但是当你通过JS触发这个功能时,你没有管理员权限,这就是为什么你可以在feedback
中插入新行,但不能更新quests