postgresql 如何检查表中是否已经存在触发器在Postgress中被触发的值

sqxo8psd  于 2023-08-04  发布在  PostgreSQL
关注(0)|答案(1)|浏览(132)

考虑具有以下字段的表1:id 1 uuid、id 2 uuid、值文本。
我正在创建一个机制,我想检查在插入table 1之后,是否已经存在相同的记录,但id反转。示例如下:

CREATE OR REPLACE FUNCTION func_chk_new_pair() 
RETURNS trigger AS $$
DECLARE

  P_viewd_profile_id uuid;

  found_uuids CURSOR  FOR
    SELECT id1 FROM table1 WHERE id1 = NEW.id2 and id2 = NEW.id1 and value = 'some_value';

    current_uuid UUID;

BEGIN
  
  OPEN found_uuids;

  -- this insert to log and see if the values are correct works properly
  insert into public.temp_log (log_text) values ('id1 : ' 
  || NEW.id1|| ' - id2: ' || NEW.id2);
  
  LOOP
    FETCH found_uuids INTO current_uuid;
    EXIT WHEN NOT FOUND;

    -- My problem is that my code never enter here
    insert into table2 (id1, value) values (NEW.id1, NEW.value);

  END LOOP;

  CLOSE found_uuids;

  RETURN NEW;

END;
$$ LANGUAGE plpgsql;

字符串
触发器创建代码

CREATE TRIGGER chk_insert_new_pair

  AFTER INSERT

  ON "table1 "

  FOR EACH ROW

  EXECUTE PROCEDURE func_chk_new_pair();


上面的代码是我开发的,可以在触发器中触发。不幸的是,我在甲骨文公司工作了多年,所以我正在与这种心态作斗争。我试过很多方法...但我还是来了
我该怎么解决这个问题?
我尝试了很多方法:if EXISTS(select 1 FROM table 1 WHERE id1 = new.id1 and id2 = new.id2 and value = new.value)
利用pk约束异常强制插入;使用内部选择循环;

cvxl0en2

cvxl0en21#

我发现问题了。
该问题与postgres无关,但与表中的SUPABASE RLS有关。
似乎是权限方面的bug。
我的表已经被授权执行所有的操作(更新,插入,删除和读取)的授权/日志会话。
但无论出于何种原因,在为授权会话创建新的RLS读取后,它都能正常工作。
谢谢大家!

相关问题