Ruta de Actualización de Extensiones
Las versiones de las extensiones se mueven independientemente de las versiones mayores de Postgres. Planifique las actualizaciones de paquetes del sistema operativo, ALTER EXTENSION UPDATE y las pruebas de regresión como una única ventana de cambio, especialmente para pgvector y PostGIS.
Receta
-- Comprobar la versión actual frente a la versión de destino
SELECT extname, extversion
FROM pg_extension
WHERE extname = 'vector';
SELECT name, default_version
FROM pg_available_extensions
WHERE name = 'vector';
-- Aplicar scripts de actualización disponibles
ALTER EXTENSION vector UPDATE TO '0.8.0';
-- Verificar
SELECT extname, extversion FROM pg_extension WHERE extname = 'vector';Cuándo usar esto: Después de aplicar parches a Postgres, desplegar nuevos paquetes de extensiones o antes de construir índices HNSW que requieran una versión mínima de pgvector.
Ejemplo de Trabajo
-- Runbook seguro de actualización (ejecutar primero en staging)
BEGIN;
-- 1) Inventario de instantánea
CREATE TEMP TABLE ext_before AS
SELECT extname, extversion FROM pg_extension;
-- 2) Actualizar una extensión
ALTER EXTENSION postgis UPDATE;
-- 3) Comparar
SELECT b.extname,
b.extversion AS before_version,
e.extversion AS after_version
FROM ext_before b
JOIN pg_extension e ON e.extname = b.extname
WHERE b.extversion IS DISTINCT FROM e.extversion;
-- 4) Prueba de humo
SELECT PostGIS_Version();
SELECT ST_Distance(
ST_MakePoint(-73.9857, 40.7484)::geography,
ST_MakePoint(-118.2437, 34.0522)::geography
) AS nyc_to_la_meters;
COMMIT;Lo que esto demuestra:
- El inventario antes y después evita omisiones silenciosas
ALTER EXTENSION UPDATEsinTOaplica el script disponible más reciente- Las consultas de prueba de humo funcionales detectan desajustes tempranos de SONAME rotos
- La transacción envuelve el cambio de metadatos; las bibliotecas del SO deben coincidir ya
Análisis Profundo
Mecánicas de Actualización
- Capa de SO / paquete - Instalar
postgresql-18-postgis-3.5(o equivalente del proveedor) en cada nodo. - Capa de base de datos -
ALTER EXTENSION name UPDATE [TO 'version']ejecuta scripts de migración SQL enEXTENSION(name)/. - Capa de índice - Algunas actualizaciones requieren
REINDEX(cambios en las clases de op de índice de pgvector). Lea las notas de la versión.
-- Listar los scripts de ruta de actualización incluidos con la extensión
SELECT version, relocatable
FROM pg_available_extension_versions
WHERE name = 'vector'
ORDER BY version;Versiones Menores vs. Mayores de Extensiones
| Escenario | Versión mayor de Postgres | Acción de la extensión |
|---|---|---|
| pgvector 0.7 a 0.8 | Mismo PG 18 | ALTER EXTENSION UPDATE, posible reindex |
| PostGIS 3.4 a 3.5 | Mismo PG 18 | ALTER EXTENSION UPDATE, ejecutar postgis_extensions_upgrade() si la documentación lo indica |
| PG 17 a PG 18 | Salto mayor | pg_upgrade o volcado/restauración, reinstalar paquetes, luego ALTER EXTENSION UPDATE |
Clústeres Multi-Nodo
- Primero la primaria - Aplicar paquetes y
ALTER EXTENSIONen la primaria. - Réplicas - Los paquetes deben existir antes de que la replicación reproduzca consultas dependientes de extensiones.
- Patroni - Sincronización rodante de paquetes del SO, luego
ALTER EXTENSIONcontrolado durante la ventana de mantenimiento. - Nube gestionada - El proveedor actualiza el catálogo de extensiones; usted aún ejecuta
ALTER EXTENSIONen cada base de datos.
Realidad del Rollback
No existe ALTER EXTENSION DOWNGRADE. El rollback significa restaurar desde una copia de seguridad o recrear índices después de reinstalar paquetes más antiguos (alto riesgo). Pruebe las actualizaciones en un clon de instantánea.
Trampas Comunes
- Desajuste binario/SQL - Un nuevo script SQL con un archivo
.soantiguo causa fallos en tiempo de ejecución. Solución: Actualice los paquetes en todos los nodos antes deALTER EXTENSION. - Reindexación de larga duración - La reconstrucción del índice HNSW de pgvector bloquea o consume I/O. Solución:
REINDEX CONCURRENTLYdonde sea compatible; programe fuera de horas pico. - Bases de datos olvidadas - Extensión actualizada en
appdbpero no enanalytics. Solución: Iterar sobre todas las bases de datos:\l+ALTER EXTENSIONpor base de datos. - Nombres de clases de op que rompen - Las consultas del cliente hacen referencia a clases de op antiguas. Solución: Busque en la base de código las definiciones de índices; migre en fases de expansión-contracción.
- Extras de topología de PostGIS - Extensiones separadas (
postgis_topology) necesitan su propiaUPDATE. Solución: Inventar todas las filaspostgis*enpg_extension. - Deriva de replicación lógica - El suscriptor no tiene la versión de la extensión. Solución: Haga coincidir las versiones de las extensiones antes de suscribirse a publicaciones con muchos DDL.
Alternativas
| Alternativa | Usar Cuando | No Usar Cuando |
|---|---|---|
| Base de datos Blue/green | Se requiere un corte sin tiempo de inactividad | El cambio de extensión es menor y probado |
| Volcado/restauración a un nuevo clúster | Salto mayor de PG + extensión juntos | El tamaño de la base de datos hace que el volcado sea impracticable |
| Congelar versión de extensión | Estabilidad sobre características | El parche de seguridad requiere una versión mínima |
| Lado a lado con nueva BD | Reconstruir índices desde cero es más rápido que la actualización in situ | La aplicación no puede tolerar el período de escritura dual |
Preguntas Frecuentes
ALTER EXTENSION UPDATE vs CREATE EXTENSION?
UPDATE migra una extensión instalada. CREATE es solo para la primera instalación.¿Puedo fijar TO una versión específica?
Sí: `ALTER EXTENSION vector UPDATE TO '0.8.0';` si ese script existe en pg_available_extension_versions.¿Qué pasa si UPDATE dice que ya es la última?
La versión instalada coincide con el script disponible más alto. Compruebe los paquetes del SO si esperaba una versión más nueva.¿UPDATE bloquea tablas?
Los bloqueos de metadatos son breves. REINDEX o VALIDATE CONSTRAINT posteriores pueden bloquear durante más tiempo.pg_upgrade y extensiones?
pg_upgrade preserva las filas de pg_extension. Instale los paquetes mayores nuevos y ejecute UPDATE después de la actualización.¿Cómo automatizar?
Herramientas de migración (Flyway/Liquibase) pueden enviar `ALTER EXTENSION` en SQL versionado después de la sincronización de paquetes de Ansible.Extensión en bases de datos plantilla?
Actualice también template1 y la base de datos postgres, o las nuevas bases de datos heredarán versiones antiguas.Actualizaciones de extensiones en Cloud SQL?
Google/AWS habilitan versiones por generación de instancia. Lea la matriz del proveedor antes de planificar.¿Verificar la salud del índice post-actualización?
`SELECT indexrelid::regclass, indisvalid FROM pg_index WHERE NOT indisvalid;`Actualizaciones de TimescaleDB?
Siga las notas de la versión de Timescale; puede requerir un orden de extensiones del toolkit separado de postgresql principal.Relacionado
- Conceptos Básicos de Extensiones - instalar y precargar
- Extensiones Confiables vs. No Confiables - revisión de seguridad
- Índices IVFFlat vs HNSW - implicaciones de la reconstrucción de índices
- Flyway y Liquibase - automatización de migraciones
- Mejores Prácticas para Extensiones - fijar versiones en IaC
Versiones de la Pila: 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.