AgentSkillsCN

Supabase Postgres Best Practices

为 Yhadr ERP 提供 Supabase 数据库设计、RLS 安全机制与性能优化的权威指南。

SKILL.md
--- frontmatter
name: Supabase Postgres Best Practices
description: Guía maestra para diseño de base de datos, seguridad RLS y rendimiento en Supabase para Yhadr ERP.

🐘 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_id references usuarios(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), nunca TIMESTAMP.
  • Precios/Moneda: Usa NUMERIC(10,2) o INTEGER (centavos). NUNCA FLOAT.
  • JSON: Usa JSONB para 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 plpgsql para 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;