🔧 Optimización de Políticas RLS

Resuelve el warning de Supabase sobre políticas RLS subóptimas y mejora el rendimiento de tu base de datos.

Warning Detectado en Supabase

Table public.profiles has a row level security policy que re-evalúa auth.uid() para cada fila, produciendo rendimiento subóptimo.

Solución: Reemplazar auth.uid() con (select auth.uid()) en las políticas RLS

Detector de Políticas RLS Subóptimas

Este detector buscará automáticamente políticas RLS que necesiten optimización en tu base de datos.

Optimización: Tabla Profiles

Script SQL optimizado para la política RLS de la tabla profiles:

-- 🔧 OPTIMIZACIÓN RLS: Tabla profiles
-- ❌ ANTES (subóptimo):
-- auth.uid() se evalúa para cada fila

-- ✅ DESPUÉS (optimizado):
-- (select auth.uid()) se evalúa una sola vez

-- Eliminar políticas existentes
DROP POLICY IF EXISTS "Users can view own profile" ON profiles;
DROP POLICY IF EXISTS "Users can update own profile" ON profiles;
DROP POLICY IF EXISTS "Users can insert own profile" ON profiles;

-- Crear políticas optimizadas
CREATE POLICY "Users can view own profile" ON profiles
  FOR SELECT USING (id = (select auth.uid()));

CREATE POLICY "Users can update own profile" ON profiles
  FOR UPDATE USING (id = (select auth.uid()));

CREATE POLICY "Users can insert own profile" ON profiles
  FOR INSERT WITH CHECK (id = (select auth.uid()));

Optimización: Tabla Eventos

Script SQL optimizado para las políticas RLS de la tabla eventos:

-- 🔧 OPTIMIZACIÓN RLS: Tabla eventos
-- Optimizar políticas para mejor rendimiento

-- Eliminar políticas existentes si existen
DROP POLICY IF EXISTS "Users can view all events" ON eventos;
DROP POLICY IF EXISTS "Users can insert own events" ON eventos;
DROP POLICY IF EXISTS "Users can update own events" ON eventos;

-- Crear políticas optimizadas
-- Todos pueden ver eventos (lectura pública)
CREATE POLICY "Users can view all events" ON eventos
  FOR SELECT USING (true);

-- Solo usuarios autenticados pueden insertar eventos
CREATE POLICY "Users can insert own events" ON eventos
  FOR INSERT WITH CHECK ((select auth.uid()) IS NOT NULL);

-- Solo el usuario que registró el evento puede actualizarlo
CREATE POLICY "Users can update own events" ON eventos
  FOR UPDATE USING (usuario_registro = (select auth.uid())::text);

Verificación Post-Optimización

Después de ejecutar las optimizaciones, verifica que el warning desaparezca en Supabase.

¿Por qué optimizar las políticas RLS?

  • Mejor rendimiento: (select auth.uid()) se evalúa una sola vez por consulta en lugar de por cada fila
  • Escalabilidad: Mejora significativa en tablas con muchos registros
  • Menos carga del servidor: Reduce el uso de CPU y memoria en Supabase
  • Sin warnings: Elimina los avisos de optimización en el dashboard de Supabase