Mejores prácticas para funciones
Las funciones de base de datos centralizan la lógica pero ocultan el comportamiento de las implementaciones de aplicaciones.
Cómo usar esta lista
- Catalogar todas las funciones
SECURITY DEFINERtrimestralmente. - Prefiere las funciones SQL para transformaciones simples.
A - Diseño
- Función SQL antes que PL/pgSQL. El planificador puede insertarla.
- Mantén las funciones puras y pequeñas. Mueve la orquestación a la aplicación cuando sea compleja.
- Etiquetas de volatilidad correctas.
IMMUTABLEsolo cuando sea verdaderamente pura.
B - Seguridad
- Por defecto
SECURITY INVOKER. Se aplica RLS. - Funciones
DEFINER:SET search_path. Revoca la ejecución dePUBLIC. - Concede
EXECUTEmínimamente. Acceso basado en roles.
C - Pruebas
- Prueba en transacciones revertidas. Bucles de CI rápidos.
- pgTAP para la suite de regresión. Versiona con migraciones.
- Documenta los efectos secundarios. Mutaciones vs lecturas.
Preguntas frecuentes
¿Los procedimientos almacenados reemplazan el código de la aplicación?
Solo para flujos de trabajo de datos estrechamente acoplados; mantén las reglas de negocio visibles en el repositorio.
Relacionados
- Conceptos básicos de funciones - introducción
- Mejores prácticas para triggers - cuándo no duplicar la lógica
Versiones de la pila: Esta página fue escrita para PostgreSQL 18.4 (estable 18, mantenimiento 17), pgvector 0.8+, PgBouncer 1.x, Patroni 3.x y PostGIS 3.5+.