포트폴리오 페이지 접속 시 아래 에러가 발생합니다:
Error: {
code: '42P17',
message: 'infinite recursion detected in policy for relation "artist_members"'
}
발생 위치: src/app/(portfolio)/page.tsx:15
const artist=await getArtistBySlug(tenant.slug);
npm run devhttp://wonjae.localhost:3000artist_members 테이블의 RLS 정책이 자기 자신을 참조하고 있는 것 같습니다.
현재 정책 (예시):
-- artist_members 테이블의 SELECT 정책
EXISTS(
SELECT1FROM artist_members am-- ← 여기서 다시 artist_members 조회
WHERE am.artist_id = artist_members.artist_id
)
이렇게 되면 정책 검사를 위해 테이블을 조회하고, 그 조회에도 정책이 적용되어 무한 반복됩니다.
PostgreSQL 문서에 따르면 SECURITY DEFINER 함수를 사용하면 RLS를 우회할 수 있다고 합니다.
-- 헬퍼 함수 (RLS 우회)
CREATEFUNCTION is_artist_member(artist_id UUID)
RETURNS BOOLEANAS $$
SELECTEXISTS(SELECT1FROM artist_membersWHERE...)
$$LANGUAGEsqlSECURITYDEFINER STABLE;
-- 정책에서 함수 사용
CREATE POLICY "Members view team"ON artist_members
FORSELECT
USING(is_artist_member(artist_members.artist_id));
개발을 계속하기 위해 TEMP_20251215_disable_recursive_policies.sql 마이그레이션을 임시로 적용했습니다.
적용된 임시 정책: