考虑具有以下字段的表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约束异常强制插入;使用内部选择循环;
1条答案
按热度按时间cvxl0en21#
我发现问题了。
该问题与postgres无关,但与表中的SUPABASE RLS有关。
似乎是权限方面的bug。
我的表已经被授权执行所有的操作(更新,插入,删除和读取)的授权/日志会话。
但无论出于何种原因,在为授权会话创建新的RLS读取后,它都能正常工作。
谢谢大家!