"message": "infinite recursion detected in policy for relation \"product\""
custom function 설정해서 rls 정책에 연결
boolean 값을 return 하게 해서 true 일 때 정책이 실행되도록 함
처음에 설정했던 값은 다음과 같았다.
SELECT 1
FROM product p
JOIN fridge_member f ON p.fridge_id = f.fridge_id
WHERE f.user_id = auth.uid() AND f.fridge_id = p.fridge_id
무한 재귀 호출이 일어나는 이유는 product 테이블에 대해서 참조를 하기 때문이다.
CREATE FUNCTION check_user_in_fridge() RETURNS BOOLEAN AS $$
SELECT EXISTS (
SELECT 1
FROM product p
JOIN fridge_member f ON p.fridge_id = f.fridge_id
WHERE f.user_id = auth.uid() AND f.fridge_id = p.fridge_id
);
$$ LANGUAGE sql SECURITY DEFINER;
-- DROP FUNCTION IF EXISTS check_user_in_fridge();
처음에 $$ LANGUAGE sql SECURITY DEFINER; 이 부분을 다르게 설정했을 때는 실행이 안 됐으나 SECTURITY DEFINER 로 설정한 후에 실행이 됐다.
https://github.com/orgs/supabase/discussions/3328
참고