Iniciar sesión
Iniciar sesión

Métodos de Actualización de PostgreSQL a una Nueva Versión

Métodos de Actualización de PostgreSQL a una Nueva Versión
Hostman Team
Technical writer
Bases de datos PostgreSQL
06.11.2025
Reading time: 8 min

En PostgreSQL, la actualización de versiones se realiza de diferentes maneras:

  • Instalar paquetes con una nueva versión de PostgreSQL. Este método es adecuado solo para actualizaciones menores. Antes de realizar la actualización, consulta las notas de la versión.

  • Uso del programa estándar pg_dumpall. Es un método confiable, pero puede haber un tiempo de inactividad prolongado.

  • Uso del programa estándar pg_upgrade. Otra forma rápida de actualizar, pero pueden ocurrir errores.

  • Actualizar mediante replicación lógica. Esta opción tiene un tiempo de inactividad mínimo, pero solo es adecuada para versiones de PostgreSQL superiores a la 10.0. Las versiones anteriores requieren extensiones. La elección depende de qué versión se utiliza en el servidor y a qué versión deseas actualizar.
    En este artículo, veremos todos los métodos de actualización mencionados.

Notas Importantes Antes de Actualizar

Lo principal es entender las particularidades de las actualizaciones entre diferentes versiones. Los números de versión consisten en dos dígitos, por ejemplo, 10.1. El primer dígito es el número de la versión principal (10). El segundo dígito es el número de la versión menor (1). Antes de PostgreSQL 10, los números de versión constaban de tres dígitos. Por ejemplo, en 9.6.3, 9.6 es el número de la versión principal y 3 es el número de la versión menor.

Debes comprender esta diferencia para elegir el método de actualización adecuado.

En las versiones menores, el formato de almacenamiento de datos no cambia, por lo que no hay problemas de compatibilidad. Por lo tanto, la transición de PostgreSQL 10.1 a 10.6 se puede realizar muy fácilmente. Para actualizar, apaga el servidor, reemplaza los archivos ejecutables y vuelve a iniciar el servidor.
Sin embargo, la documentación indica que algunas versiones pueden requerir cambios manuales. Por lo tanto, siempre lee las notas de la versión antes de realizar la actualización.

En las versiones principales, el formato de los datos puede cambiar. Esto hace que la actualización sea más difícil. Necesitarás exportar los datos e importarlos nuevamente, usar el programa pg_upgrade o utilizar replicación lógica.

Actualización dentro de una misma versión principal

Veamos cómo actualizar PostgreSQL versión 14.1 a PostgreSQL 14.3 en un servidor Ubuntu.

PostgreSQL está disponible en Ubuntu por defecto. Comienza con el comando:

sudo apt-get upgrade

Debian y Ubuntu solo lanzan una versión de PostgreSQL por cada versión del sistema operativo. Por ejemplo, Debian Squeeze/6.0 solo tiene PostgreSQL 8.4. Si necesitas una versión diferente de PostgreSQL, usa los paquetes de PGDG.

Si deseas la última versión de PostgreSQL, primero debes instalar el repositorio de Postgres.

Agrega un repositorio:

sudo sh -c 'echo "deb http://apt.postgresql.org/pub/repos/apt $(lsb_release -cs)-pgdg main" > /etc/apt/sources.list.d/pgdg.list'

Importa la clave de firma:

wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add -

Actualiza la lista de paquetes en el sistema:

sudo apt-get update

Instala la versión requerida de PostgreSQL:

sudo apt-get -y install postgresql-14.3

Para ver la lista de DBMS instalados, ejecuta:

dpkg --get-selections | grep postgres

También ve la lista de clusters:

pg_lsclusters

Detén PostgreSQL antes de hacer cambios:

sudo service postgresql stop

Cuando se instalan los paquetes de PostgreSQL, crean un cluster predeterminado para ti. Debes cambiar el nombre del nuevo cluster de Postgres para evitar conflictos con el nombre del antiguo cluster al actualizar.

sudo pg_renamecluster 14.3 main main_pristine

Actualiza el antiguo cluster:

sudo pg_upgradecluster 14.1 main

Inicia el servicio:

sudo service postgresql start

Verifica nuevamente la lista de clusters y asegúrate de que el nuevo cluster esté funcionando:

pg_lsclusters

Elimina el antiguo cluster:

sudo pg_dropcluster 14.1 main

Actualización mediante pg_dumpall

Si necesitas cambiar la versión principal, usa el programa pg_dumpall. La esencia de este método es descargar los datos de una versión principal y luego cargarlos en otra.

Antes de descargar los datos, asegúrate de que no se estén realizando cambios en la base de datos en ese momento. De lo contrario, algunos de los cambios pueden no ser incluidos en la descarga final.

Obtén la descarga y escríbela en un archivo:

pg_dumpall > output_file

Detén el servidor:

pg_ctl stop

Cambia el nombre del antiguo directorio para evitar conflictos de nombres:

mv /usr/local/pgsql /usr/local/pgsql.old

El antiguo directorio puede eliminarse. Pero es más sabio renombrarlo para dejar espacio para la restauración. En lugar de /usr/local/pgsql, especifica la ruta a tu directorio.

Instala la nueva versión desde la fuente. Hay una guía detallada en la documentación.

Crea un nuevo cluster:

/usr/local/pgsql/bin/initdb -D /usr/local/pgsql/data

Transfiere todos los cambios a los archivos pg_hba.conf y postgresql.conf.

Inicia el servidor de bases de datos:

/usr/local/pgsql/bin/postgres -D /usr/local/pgsql/data

Restaura los datos desde la copia de seguridad:

/usr/local/pgsql/bin/psql -d postgres -f output_file

El inconveniente de este método es que el servidor estará apagado durante mucho tiempo. Para reducir el tiempo de inactividad, puedes instalar el nuevo servidor en un directorio diferente y luego ejecutar los servidores antiguo y nuevo en diferentes puertos. Para transferir los datos, usa el comando:

pg_dumpall -p 5432 | psql -d postgres -p 5433

En lugar de 5432 y 5433, especifica los números de puerto en los que ejecutaste los servidores.

Actualización mediante pg_upgrade

Para evitar descargar e importar los datos, usa el programa pg_upgrade. Ayuda a actualizar más rápido. El programa pg_upgrade crea nuevas tablas del sistema, teniendo en cuenta los cambios en las últimas versiones de PostgreSQL. En este caso, los antiguos archivos de datos se mantienen. Además, pg_upgrade verifica que los clusters sean compatibles.

El programa pg_upgrade te ayuda a actualizar desde PostgreSQL 8.4.X a la versión actual del DBMS.

Veamos un plan de actualización general usando pg_upgrade.

Mueve el antiguo cluster. Esto debe hacerse si la carpeta no estaba vinculada a la antigua versión. Por ejemplo, si se encuentra en /usr/local/pgsql. Si no lo renombras, ocurrirá un conflicto durante la actualización.

El renombrado se realiza cuando el servidor está apagado con el comando:

mv /usr/local/pgsql /usr/local/pgsql.old

Construye la nueva versión desde la fuente. Ajusta la configuración para que las opciones sean compatibles con la configuración del antiguo cluster. Antes de iniciar la actualización, pg_upgrade verificará la compatibilidad de las opciones.

Instala nuevos archivos ejecutables. Para colocar el servidor en un directorio no estándar, usa el prefijo:

make prefix=/usr/local/pgsql.new install

Usa initdb para inicializar un nuevo cluster. Verifica que las opciones sean compatibles con las del antiguo cluster.

Instala los archivos de objetos compartidos de la extensión. Si hay actualizaciones disponibles, pg_upgrade creará automáticamente un script para su posterior instalación.

Transfiere los archivos de búsqueda de texto completo.

Configura la autenticación de pares en pg_hba.conf. Esto debe hacerse porque pg_upgrade se conectará a los antiguos y nuevos hosts varias veces.

Verifica que los servidores antiguo y nuevo estén detenidos:

pg_ctl -D /opt/PostgreSQL/9.6 stop

pg_ctl -D /opt/PostgreSQL/14 stop

Ejecuta pg_upgrade desde el nuevo servidor. Primero, ejecuta el programa en modo de verificación agregando la opción: pg_upgrade --check. Como respuesta, recibirás una lista de ajustes que deben realizarse manualmente después de la actualización.

Si hiciste cambios en el archivo pg_hba.conf, restáuralo a su estado anterior. A veces, otras configuraciones en el nuevo cluster deben cambiarse para que coincidan con la configuración del antiguo cluster.

Inicia el servidor.

Si estás satisfecho con el resultado, elimina el antiguo cluster.

Para detalles y características del uso de pg_upgrade, consulta la documentación.

Uso de Replicación Lógica

Desde la versión 10 de PostgreSQL, tenemos un método para la replicación lógica de objetos de datos y los cambios en ellos. Está basado en el uso de identificadores de replicación; generalmente son claves primarias.

La replicación lógica usa el modelo de publicación-suscripción. El usuario crea una instantánea de la base de datos publicada y la copia al suscriptor. En la documentación de PostgreSQL, uno de los escenarios típicos para usar replicación lógica es precisamente la replicación entre diferentes versiones principales de PostgreSQL.

El servidor de respaldo puede estar en el mismo host o en otro. Después de que la sincronización esté completa, se pueden usar diversas opciones. Por ejemplo, puedes hacer que el nuevo servidor sea el principal y apagar el antiguo.

El principal beneficio de la replicación lógica es el tiempo de inactividad mínimo. La interrupción del servidor, en algunos casos, se limita a unos pocos segundos.

Conclusión

Examinamos los métodos universales para actualizar PostgreSQL a una nueva versión principal y actualizar dentro de una versión principal.

Con esta guía, puedes elegir el método que funcione mejor para tu caso particular y actualizar tu versión actual de PostgreSQL.

Bases de datos PostgreSQL
06.11.2025
Reading time: 8 min

Similares

Entorno Kubernetes

Implementar PostgreSQL en Kubernetes: guía paso a paso

PostgreSQL es un sistema de gestión de bases de datos relacional (RDBMS) muy popular que ofrece funciones de alta disponibilidad como replicación en streaming, replicación lógica y soluciones de failover. Implementar PostgreSQL en Kubernetes permite construir sistemas resilientes con mínimo tiempo de inactividad y alta disponibilidad de datos. Con los StatefulSets de Kubernetes, puedes escalar el despliegue de PostgreSQL según la demanda. Choose hour server now! Preparar el entorno de Kubernetes Asegúrate de tener lo siguiente: Cluster de Kubernetes (en la nube o local): puedes crear uno rápidamente en Hostman. Para usar un entorno local, instala herramientas como k3s, minikube, microk8s o kind. kubectl: la herramienta de línea de comandos para interactuar con el clúster. Necesita un archivo YAML de configuración con los detalles del clúster, que generalmente proporciona tu proveedor.  Descárgalo desde el panel de control de Hostman y luego establece la variable de entorno: Para conectarse, debe configurar la variable de entorno KUBECONFIG según corresponda. export KUBECONFIG=/absolute/path/to/file/k8s-cluster-config.yaml Helm: la CLI de Helm es necesaria para instalar charts. Se requiere Helm versión 3. Desplegar PostgreSQL con un chart de Helm Helm es el gestor de paquetes de Kubernetes, similar a apt en Ubuntu/Debian. En lugar de crear múltiples archivos YAML (Pods, Services, Volúmenes, Secrets, etc.), puedes hacerlo todo con un solo comando. Paso 1: Agregar el repositorio Helm helm repo add bitnami https://charts.bitnami.com/bitnami Para sincronizar su repositorio Helm local con el remoto: helm repo update Paso 2: Gestionar la persistencia de datos PostgreSQL necesita almacenamiento persistente para que los datos se mantengan incluso si un pod falla o se reprograma. Crea el archivo postgres-local-pv.yaml: apiVersion: v1 kind: PersistentVolume metadata: name: postgresql-local-pv spec: capacity: storage: 5Gi accessModes: - ReadWriteOnce persistentVolumeReclaimPolicy: Retain storageClassName: manual hostPath: path: /mnt/data/postgresql ⚠️ Advertencia: hostPath apunta a una ruta local en un nodo específico, lo cual no es recomendable en producción. Para entornos productivos, usa almacenamiento nativo en la nube (Ceph, Portworx, OpenEBS, GlusterFS) para mayor fiabilidad y escalabilidad. Crea la PVC (PersistentVolumeClaim) — archivo postgres-local-pvc.yaml: apiVersion: v1 kind: PersistentVolumeClaim metadata: name: postgresql-local-pvc spec: accessModes: - ReadWriteOnce resources: requests: storage: 5Gi storageClassName: manual El modo ReadWriteOnce significa que solo un nodo puede montar el volumen en modo lectura/escritura al mismo tiempo. Usar ReadWriteMany no aumenta la alta disponibilidad en PostgreSQL y puede causar corrupción o inconsistencia de datos. Aplica los manifiestos: kubectl apply -f postgres-local-pv.yamlkubectl apply -f postgres-local-pvc.yaml Paso 3: Instalar PostgreSQL con Helm helm install tutorial-db bitnami/postgresql --set auth.username=bhuwan \ --set auth.password=”AeSeigh2gieshe” \ --set auth.database=k8s-tutorial \ --set auth.postgresPassword=”Ze4hahshez6dop9vaing” \ --set primary.persistence.existingClaim=postgresql-local-pvc \ --set volumePermissions.enabled=true Verifica el despliegue: kubectl get all Paso 4: Probar la conexión export POSTGRES_PASSWORD=$(kubectl get secret --namespace default tutorial-db-postgresql -o jsonpath="{.data.password}" | base64 -d) kubectl run tutorial-db-postgresql-client --rm --tty -i --restart='Never' \ --image docker.io/bitnami/postgresql:17.2.0-debian-12-r6 \ --env="PGPASSWORD=$POSTGRES_PASSWORD" \ --command -- psql --host tutorial-db-postgresql \ -U bhuwan -d k8s-tutorial -p 5432 El pod se eliminará automáticamente al finalizar la sesión gracias al parámetro --rm. Si cambiaste el nombre del release, el usuario o la base de datos, ajusta los comandos. Implementar PostgreSQL en Kubernetes desde cero Un StatefulSet es el tipo de recurso ideal para aplicaciones con estado, como PostgreSQL, ya que asigna identidades de red y volúmenes persistentes a cada pod. Limpia y recrea las configuraciones: helm delete tutorial-db kubectl delete pvc postgresql-local-pvc kubectl delete pv postgresql-local-pv kubectl apply -f postgres-local-pv.yaml -f postgres-local-pvc.yaml Crea el archivo postgres-statefulset.yaml: apiVersion: apps/v1 kind: StatefulSet metadata: name: postgres-statefulset labels: app: postgres spec: serviceName: "postgresql-headless-svc" replicas: 1 selector: matchLabels: app: postgres template: metadata: labels: app: postgres spec: containers: - name: postgres image: postgres:17.2 envFrom: - secretRef: name: postgresql-secret ports: - containerPort: 5432 name: postgresdb volumeMounts: - name: pv-data mountPath: /var/lib/postgresql/db volumes: - name: pv-data persistentVolumeClaim: claimName: postgresql-local-pvc Crea el Secret con las credenciales: kubectl create secret generic postgresql-secret --from-literal=POSTGRES_PASSWORD=Ze4hahshez6dop9vaing kubectl apply -f postgres-statefulset.yaml Si el pod queda en estado Pending, crea una StorageClass: kind: StorageClass apiVersion: storage.k8s.io/v1 metadata: name: manual provisioner: kubernetes.io/no-provisioner volumeBindingMode: WaitForFirstConsumer Verifica los detalles: kubectl describe pod postgres-statefulset-0 Crea un Headless Service para el acceso interno — archivo postgres-service.yaml: apiVersion: v1 kind: Service metadata: name: postgresql-headless-svc spec: type: ClusterIP selector: app: postgres ports: - port: 5432 targetPort: 5432 clusterIP: None Conéctate para probar: kubectl run tutorial-db-postgresql-client --rm --tty -i --restart='Never' \ --image docker.io/bitnami/postgresql:17.2.0-debian-12-r6 \ --env="PGPASSWORD=Ze4hahshez6dop9vaing" \ --command -- psql --host postgres-statefulset-0.postgresql-headless-svc \ -U postgres -p 5432 Escalado, replicación y copias de seguridad Escalar un StatefulSet: kubectl scale statefulset postgres-statefulset --replicas=3   Puedes acceder a pods individuales, por ejemplo: postgres-statefulset-1.postgresql-headless-svc. Para copias de seguridad, crea un CronJob que ejecute pg_dump. También puedes usar VolumeSnapshots si el proveedor lo permite. Buenas prácticas Requests y Limits: define límites de CPU y memoria adecuados. Backups regulares: usa CronJobs y snapshots. Monitoreo y logs: Prometheus + Grafana para métricas (rendimiento, uso de disco, replicación). Pod Disruption Budgets (PDB): evita que múltiples pods se reinicien al mismo tiempo. Choose your server now! Conclusión El chart Helm es la forma recomendada para implementaciones complejas o en producción. Helm automatiza la gestión de versiones y simplifica la configuración de recursos. Con helm template, puedes generar los YAML localmente y personalizarlos antes del despliegue. Kubernetes ofrece escalabilidad, flexibilidad y automatización para PostgreSQL. Con StatefulSets, PVCs, PDBs y gestión de Secrets, puedes tener una base de datos lista para producción, segura y resiliente.
27 October 2025 · 6 min to read

¿Tienes preguntas,
comentarios o inquietudes?

Nuestros profesionales están disponibles para asistirte en cualquier momento,
ya sea que necesites ayuda o no sepas por dónde empezar.
Hostman's Support