🐘 Supabase & Postgres Best Practices
Usa estas reglas para CADA nueva tabla o módulo del ERP.
1. Nombramiento y Convenciones
- •Tablas: snake_case, plural (ej:
usuarios,facturas_detalles). - •Columnas: snake_case (ej:
created_at,institucion_id). - •PKs: Siempre
id UUID PRIMARY KEY DEFAULT uuid_generate_v4(). - •FKs: Nombres explícitos (ej:
usuario_idreferencesusuarios(id)).
2. Seguridad (RLS - Row Level Security)
NUNCA crees una tabla sin RLS.
sql
ALTER TABLE mi_tabla ENABLE ROW LEVEL SECURITY;
-- Política Estándar (Acceso por Institución)
CREATE POLICY "Acceso por Institución" ON mi_tabla
USING (institucion_id = auth.jwt() ->> 'institucion_id');
3. Tipos de Datos
- •Fechas: SIEMPRE usa
TIMESTAMPTZ(con zona horaria), nuncaTIMESTAMP. - •Precios/Moneda: Usa
NUMERIC(10,2)oINTEGER(centavos). NUNCAFLOAT. - •JSON: Usa
JSONBpara datos no estructurados y búsquedas rápidas.
4. Performance & Índices
- •Crea índices en todas las columnas FK (
institucion_id,usuario_id). - •Para búsquedas de texto, usa índices GIN:
sql
CREATE INDEX idx_busqueda ON mi_tabla USING gin(to_tsvector('spanish', nombre || ' ' || descripcion));
5. Funciones y Triggers
- •Usa
plpgsqlpara lógica compleja. - •Prefiere Triggers para auditoría (
updated_at, logs). - •Database Functions > Client logic para operaciones pesadas.
6. Realtime
- •Habilita Realtime SOLO en tablas necesarias para evitar sobrecarga.
sql
alter publication supabase_realtime add table mensajes;