Mejores Prácticas para Extensiones
Cómo Usar Esta Lista
- Revísala antes de aprobar cualquier
CREATE EXTENSIONnuevo en producción. - Fija versiones en Terraform, Ansible y SQL de migración conjuntamente.
- Revisa trimestralmente contra exportaciones de inventario de
pg_extension.
A - Gobernanza
- Mantén un ADR (Documento de Decisión Arquitectónica) escrito de lista blanca. Cada extensión instalada se mapea a un propietario, una versión fija y una fecha de revisión.
- Bloquea extensiones no confiables por defecto.
plpython3u,file_fdwydblinkrequieren una excepción de CISO. - Centraliza la autoridad de instalación. Rol dedicado
dba_deploy, no contraseñas de superusuario compartidas. - Registra el DDL de extensiones. Un trigger de eventos o
pgauditcapturaCREATE EXTENSIONcon el actor y la base de datos. - Misma política en staging. Las instalaciones experimentales se desvían hacia restauraciones de copias de seguridad y scripts de migración.
B - Instalación y Diseño
- Usa un esquema
extensionsdedicado. Mantienepubliclimpio y clarificasearch_pathpara roles de aplicación. - Fija la versión en la instalación:
CREATE EXTENSION vector WITH SCHEMA extensions VERSION '0.8.0'; - Instala paquetes del sistema operativo antes que SQL. Los archivos de control de extensiones deben existir para tu versión principal de Postgres (18).
- Configura
preloadantes del reinicio. Añade entradas deshared_preload_librariessolo con una ventana de reinicio planificada. - Otorga
USAGE, noCREATE, a los roles de aplicación. Las aplicaciones llaman a funciones; no instalan extensiones.
C - Actualizaciones y Operaciones
- Actualiza los paquetes en todos los nodos primero. Las réplicas y los standbys de Patroni necesitan binarios
.socoincidentes antes deALTER EXTENSION UPDATE. - Realiza pruebas de humo después de cada actualización de extensión. Consulta de distancia de PostGIS, consulta de distancia de pgvector, cifrado/descifrado de pgcrypto.
- Planifica la reindexación para cambios en las clases de índice (opclasses). Las notas de lanzamiento de pgvector y PostGIS señalan la necesidad obligatoria de
REINDEX. - Recorre todas las bases de datos.
template1,postgresy las bases de datos de análisis son fáciles de pasar por alto. - Archiva el inventario trimestralmente.
SELECT * FROM pg_extensionpor base de datos almacenado con los IDs de los tickets de cambio.
D - Seguridad y Cumplimiento
- Revoca el permiso
PUBLICde ejecución en funciones sensibles. La instalación de extensiones no implica que sean llamables en toda la aplicación. - Mantén las extensiones fuera de los roles de DDL de replicación lógica. Los suscriptores deben coincidir con las versiones antes de la reproducción.
- Escanea en busca de CVEs en las versiones fijadas. pgvector, PostGIS y pgcrypto tienen ciclos de lanzamiento independientes del núcleo de Postgres.
- Documenta las implicaciones de la licencia. La GPL de PostGIS puede ser relevante para el empaquetado de SaaS; regístralo en el ADR.
- Valida los runbooks de restauración. La restauración PITR vuelve a aplicar el conjunto de extensiones antiguo; ejecuta el hook de inventario post-restauración.
Preguntas Frecuentes
¿Extensiones mínimas para RAG?
Normalmente solo `vector`. Añade `pgcrypto` si hasheas claves API en reposo.¿Deben las extensiones vivir en template1?
Solo si cada nueva base de datos las necesita. De lo contrario, instálalas explícitamente por base de datos de aplicación.¿Ejemplo de fijación en IaC?
Versión del motor `engine_version` de Terraform + versión del paquete `postgresql-18-pgvector` de Ansible + `VERSION '0.8.0'` de SQL de Flyway.¿Detectar instalaciones ocultas?
Trabajo nocturno que compara `pg_extension` con la lista blanca; alerta ante diferencias.¿Retraso del proveedor de la nube?
La fijación interna no puede exceder lo que RDS/Cloud SQL/Neon expone en `pg_available_extensions`.¿Eliminar extensiones no utilizadas?
Sí, después de la revisión de `pg_depend`. Reduce la superficie de actualización y de CVE.¿Múltiples esquemas de extensiones?
Prefiere un único esquema `extensions`. Múltiples esquemas complican las concesiones de permisos.¿Extensiones y pools de conexión?
El modo de transacción de pgbouncer está bien; las extensiones están en el lado del servidor. Ten cuidado con las sentencias preparadas con algunos drivers.¿Documentar en los runbooks?
Enlaza el ADR, el SQL de instalación, el SQL de actualización y las limitaciones de reversión (solo restauración).¿Próximo disparador de revisión?
Actualización principal de Postgres, actualización menor de pgvector con cambios de índice, o nueva característica del producto que requiera PostGIS.Relacionado
- Conceptos Básicos de Extensiones - CREATE EXTENSION y preload
- Política de Lista Blanca de Extensiones - ADR empresarial
- Ruta de Actualización de Extensiones - ALTER EXTENSION UPDATE
- Extensiones Confiables vs. No Confiables - revisión de seguridad
- Conceptos Básicos de Postgres Gestionado - matrices de extensiones en la nube
Versiones de Stack: Esta página fue escrita para PostgreSQL 18.4 (estable 18, mantenimiento 17), pgvector 0.8+, PostGIS 3.5+, pgbouncer 1.x, y Patroni 3.x.