postgresql supplement函数只有在dbms中添加时才起作用,而不是通过查询

hpxqektj  于 2023-11-18  发布在  PostgreSQL
关注(0)|答案(1)|浏览(143)

我有两个表,feedbackquests
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中添加新行,并更新任务等级。我不知道为什么。请帮帮忙。

7z5jn7bk

7z5jn7bk1#

这个问题的解决方法是将UPDATE RLS策略添加到表quests中。我只是忘记了。
当你在feedback中添加一个新行时,更新功能是工作的,因为它是通过管理员权限触发的。但是当你通过JS触发这个功能时,你没有管理员权限,这就是为什么你可以在feedback中插入新行,但不能更新quests

相关问题