# RLS policy causes infinite recursion

If your Storage or database requests encounter an error and the corresponding Postgres logs show '*infinite recursion detected in policy for relation "table\_name"*', it is because of infinite recursion in your Row-Level Security (RLS) policies.

**Why Does This Happen?**

This error indicates a circular dependency between RLS policies. It occurs when an RLS policy queries a table with RLS enabled, and that table's policies end up triggering the original policy again.

This can happen when:

- A policy queries the same table.
- A policy queries another table whose RLS policies eventually reference the original table, creating a circular dependency.

Postgres detects the recursive policy evaluation and terminates the query to prevent infinite recursion. This error can also occur during Storage operations if a Storage RLS policy references a table with self-referencing or mutually recursive RLS policies.

**How to Resolve This Issue:**

Option 1: Update the table's RLS policies to ensure they do not directly or indirectly create a circular dependency.

Option 2: Wrap the permission check in a SECURITY DEFINER function. This executes with the privileges of the user who created the function — if created with a role like postgres, it bypasses RLS on the target table and breaks the recursion. See [Use Security Definer Functions](https://supabase.com/docs/guides/database/postgres/row-level-security#use-security-definer-functions) for details.
