Actualizar la versión principal de la base de datos en el lugar

Esta página describe cómo actualizar la versión principal de la base de datos actualizando su instancia de Cloud SQL en el lugar en lugar de migrar los datos .

Introducción

Los proveedores de software de bases de datos lanzan periódicamente nuevas versiones principales con nuevas funciones, mejoras de rendimiento y de seguridad. Cloud SQL acepta nuevas versiones tras su lanzamiento. Una vez que Cloud SQL ofrece soporte para una nueva versión principal, puede actualizar sus instancias para mantener su base de datos actualizada.

Puede actualizar la versión de la base de datos de una instancia localmente o migrando datos . Las actualizaciones locales son una forma más sencilla de actualizar la versión principal de su instancia. No necesita migrar datos ni cambiar las cadenas de conexión de la aplicación. Con las actualizaciones locales, puede conservar el nombre, la dirección IP y otras configuraciones de su instancia actual después de la actualización. Las actualizaciones locales no requieren mover archivos de datos y se completan más rápido. En algunos casos, el tiempo de inactividad es menor que el que implica migrar los datos.

La operación de actualización local de Cloud SQL para PostgreSQL utiliza la utilidad pg_upgrade .

Planificar una actualización de versión importante

  1. Confirme que tiene el rol necesario para realizar una actualización de versión principal: Propietario de Cloud SQL o Administrador de Cloud SQL .
  2. Elija una versión principal de destino.

    nube g

    Para obtener información sobre la instalación y los primeros pasos con la CLI de gcloud, consulte Instalar la CLI de gcloud . Para obtener información sobre cómo iniciar Cloud Shell, consulte Usar Cloud Shell .

    Para comprobar las versiones de base de datos que puede seleccionar para una actualización local en su instancia, haga lo siguiente:

    1. Ejecute el siguiente comando.
    2. gcloud sql instances describe INSTANCE_NAME
         

      Reemplace INSTANCE_NAME con el nombre de la instancia.

    3. En la salida del comando, ubique la sección denominada upgradableDatabaseVersions .
    4. Cada subsección devuelve una versión de la base de datos que puede actualizarse. En cada subsección, revise los siguientes campos.
      • majorVersion : la versión principal a la que puede apuntar para la actualización local.
      • name : la cadena de versión de la base de datos que incluye la versión principal.
      • displayName : el nombre para mostrar de la versión de la base de datos.

    REST versión 1

    Para verificar qué versiones de la base de datos de destino están disponibles para una actualización local de una versión principal, utilice el método instances.get de la API de administración de Cloud SQL.

    Antes de utilizar cualquiera de los datos solicitados, realice las siguientes sustituciones:

    • INSTANCE_NAME : El nombre de la instancia.

    Método HTTP y URL:

    GET https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances/INSTANCE_NAME

    Para enviar su solicitud, expanda una de estas opciones:

    Debería recibir una respuesta JSON similar a la siguiente:

    
    upgradableDatabaseVersions:
    
    {
      major_version: "POSTGRES_15_0"
      name: "POSTGRES_15_0"
      display_name: "PostgreSQL 15.0"
    }
    
    

    REST v1beta4

    Para verificar qué versiones de la base de datos de destino están disponibles para la actualización local de la versión principal de una instancia, utilice el método instances.get de la API de administración de Cloud SQL.

    Antes de utilizar cualquiera de los datos solicitados, realice las siguientes sustituciones:

    • INSTANCE_NAME : El nombre de la instancia.

    Método HTTP y URL:

    GET https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID/instances/INSTANCE_NAME

    Para enviar su solicitud, expanda una de estas opciones:

    Debería recibir una respuesta JSON similar a la siguiente:

    
    upgradableDatabaseVersions:
    
    {
      major_version: "POSTGRES_15_0"
      name: "POSTGRES_15_0"
      display_name: "PostgreSQL 15.0"
    }
    
    

    Para obtener la lista completa de las versiones de bases de datos compatibles con Cloud SQL, consulte Versiones de bases de datos y políticas de versiones .

  3. Tenga en cuenta las características ofrecidas en cada versión principal de la base de datos y aborde las incompatibilidades.

    Las nuevas versiones principales introducen cambios incompatibles que podrían requerir la modificación del código de la aplicación, el esquema o la configuración de la base de datos. Antes de actualizar la instancia de la base de datos, revise las notas de la versión principal de destino para determinar las incompatibilidades que debe solucionar.

  4. Pruebe la actualización con una ejecución en seco.

    Realice un simulacro del proceso de actualización integral en un entorno de prueba antes de actualizar la base de datos de producción. Puede clonar su instancia para crear una copia idéntica de los datos con la que probar el proceso de actualización.

    Además de validar que la actualización se complete exitosamente, ejecute pruebas para garantizar que la aplicación se comporte como se espera en la base de datos actualizada.

  5. Decide un momento para realizar la actualización.

    La actualización requiere que la instancia no esté disponible durante un tiempo. Planifique la actualización durante un período de baja actividad de la base de datos.

Prepárese para una actualización de versión importante

Antes de actualizar, complete los siguientes pasos.

  1. Verifique el valor LC_COLLATE para las bases de datos template y postgres . El conjunto de caracteres de cada base de datos debe ser en_US.UTF8 .

    Si el valor de LC_COLLATE para las bases de datos template y postgres no es en_US.UTF8 , la actualización a la versión principal falla. Para solucionar esto, si alguna de las bases de datos tiene un conjunto de caracteres distinto de en_US.UTF8 , cambie el valor de LC_COLLATE a en_US.UTF8 antes de realizar la actualización.

    Para cambiar la codificación de una base de datos:

    1. Vacíe su base de datos.
    2. Elimina tu base de datos.
    3. Cree una nueva base de datos con la codificación diferente (para este ejemplo, en_US.UTF8 ).
    4. Recargue sus datos.

    Otra opción es cambiar el nombre de la base de datos:

    1. Cerrar todas las conexiones a la base de datos.
    2. Cambiar el nombre de la base de datos.
    3. Actualice las configuraciones de su aplicación para utilizar el nuevo nombre de la base de datos.
    4. Crea una nueva base de datos vacía con la codificación predeterminada.

    Le recomendamos que realice estos pasos en una instancia clonada antes de aplicarlos a una instancia de producción.

  2. Administre sus extensiones restantes de PostgreSQL .

    La mayoría de las extensiones funcionan en la versión principal de la base de datos actualizada. Desinstale las extensiones que ya no sean compatibles con la versión de destino. Por ejemplo, desinstale la extensión chkpass si actualiza a PostgreSQL 11 o versiones posteriores.

    Puede actualizar PostGIS y sus extensiones relacionadas a sus últimas versiones compatibles manualmente.

    En ocasiones, actualizar desde la versión 2.x de PostGIS puede generar objetos de base de datos sobrantes que no están asociados con la extensión PostGIS. Esto puede bloquear la actualización. Para obtener información sobre cómo resolver este problema, consulte "Reparar una instalación ráster de PostGIS defectuosa" .

    En ocasiones, la actualización a la versión 3.1.7 o posterior de PostGIS no se puede completar debido a que los objetos utilizan funciones obsoletas. Esto puede bloquear la actualización. Para comprobar el estado de la actualización, ejecute SELECT PostGIS_full_version(); . Si aparecen advertencias, elimine los objetos que utilicen las funciones obsoletas y actualice la extensión de PostGIS a una versión intermedia o superior. Tras completar estas acciones, vuelva a ejecutar el comando SELECT PostGIS_full_version(); . Compruebe que no aparezcan advertencias. A continuación, proceda con la actualización.

    Para obtener más información sobre cómo actualizar las extensiones de PostGIS, consulte Actualización de PostGIS . Para obtener información sobre problemas relacionados con la actualización de PostGIS, consulte Comprobar la versión de su instancia de PostgreSQL .
  3. Administre sus indicadores de base de datos personalizados. Compruebe los nombres de los indicadores de base de datos personalizados que haya configurado para su instancia de PostgreSQL. Para obtener información sobre problemas relacionados con estos indicadores, consulte "Comprobar los indicadores personalizados de su instancia de PostgreSQL" .
  4. Al actualizar de una versión principal a otra, intente conectarse a cada base de datos para comprobar si hay problemas de compatibilidad. Asegúrese de que las bases de datos puedan conectarse entre sí. Revise el campo datallowconn de cada base de datos para comprobar que se permite la conexión. Un valor t significa que está permitido y un valor f indica que no se puede establecer la conexión.
  5. Si utiliza la instalación de Datadog para actualizar su instancia de Cloud SQL a PostgreSQL 10 o versiones posteriores, antes de realizar la actualización, elimine la función pg_stat_activity() .

Limitaciones conocidas

Las siguientes limitaciones afectan las actualizaciones locales de versiones principales de Cloud SQL para PostgreSQL:

  • No es posible realizar una actualización de versión principal local en una réplica externa .
  • La actualización de instancias que tienen más de 1000 bases de datos de una versión a otra puede llevar mucho tiempo y generar tiempos de espera.
  • Use la instrucción select * from pg_largeobject_metadata; para consultar el número de objetos grandes en cada base de datos PostgreSQL de su instancia de Cloud SQL. Si el resultado de todas sus bases de datos supera los 10 millones de objetos grandes, la actualización fallará. Cloud SQL revierte a la versión anterior de su base de datos.
  • Antes de realizar una actualización local de una versión principal de PostgreSQL 16 y posteriores, actualice la extensión PostGIS de todas sus bases de datos a la versión 3.4.0.
  • Antes de realizar una actualización de versión principal local a PostgreSQL 17, actualice la extensión rdkit de todas sus bases de datos a la versión 4.6.1.
  • Si utiliza las versiones 9.6, 10, 11 o 12 de PostgreSQL, la versión 3.4.0 de la extensión PostGIS no es compatible. Por lo tanto, para realizar una actualización principal local a PostgreSQL 16 o posterior, primero debe actualizar a una versión intermedia de PostgreSQL (versiones 13, 14 o 15).
  • Si instala las extensiones pg_ivm o pg_squeeze en su instancia, no podrá realizar una actualización de versión principal. Para solucionarlo, desinstálelas y realice la actualización. Para obtener más información sobre las extensiones, consulte Configurar extensiones de PostgreSQL .

  • Si habilita las marcas vacuum_defer_cleanup_age y force_parallel_mode , no podrá realizar una actualización de versión principal. Para solucionarlo, elimine estas marcas y luego realice la actualización. Para obtener más información sobre las marcas, incluyendo cómo eliminarlas, consulte Configurar marcas de base de datos .

Realizar la actualización de la versión principal

Puede actualizar la versión principal de una sola instancia de Cloud SQL o puede actualizar la versión principal de una instancia principal e incluir todas sus réplicas en la actualización, incluidas las réplicas en cascada y las réplicas entre regiones.

Actualizar la versión principal de una sola instancia

Cuando inicia una operación de actualización para una sola instancia, Cloud SQL hace lo siguiente:

  1. Comprueba la configuración de su instancia para garantizar que la instancia sea compatible para una actualización.
  2. Después de que Cloud SQL verifica la configuración, hace que la instancia no esté disponible.
  3. Realiza una copia de seguridad previa a la actualización.
  4. Realiza la actualización en la instancia.
  5. Hace que su instancia esté disponible.
  6. Realiza una copia de seguridad posterior a la actualización.

Consola

  1. En el Google Cloud consola, vaya a la página Instancias de Cloud SQL .

    Ir a Instancias de Cloud SQL

  2. Para abrir la página Descripción general de una instancia, haga clic en el nombre de la instancia.
  3. Haga clic en Editar .
  4. En la sección Información de la instancia , haga clic en el botón Actualizar y confirme que desea ir a la página de actualización.
  5. En la página Elegir una versión de base de datos , haga clic en la lista Versión de base de datos para actualización y seleccione una de las versiones principales de base de datos disponibles.
  6. Haga clic en Continuar .
  7. En el cuadro ID de instancia , ingrese el nombre de la instancia y luego haga clic en el botón Iniciar actualización .
La operación tarda varios minutos en completarse.

Verifique que la versión principal de la base de datos actualizada aparezca debajo del nombre de la instancia en la página Descripción general de la instancia.

nube g

  1. Iniciar la actualización.

    Utilice el comando gcloud sql instances patch con el indicador --database-version .

    Antes de ejecutar el comando, reemplace lo siguiente:

    • INSTANCE_NAME : El nombre de la instancia.
    • DATABASE_VERSION : La enumeración de la versión principal de la base de datos, que debe ser posterior a la versión actual. Especifique una versión de base de datos para una versión principal disponible como destino de actualización para la instancia. Puede obtener esta enumeración como primer paso de "Planificar la actualización" . Si necesita una lista completa de las enumeraciones de versiones de la base de datos, consulte SqlDatabaseEnums .
    gcloud sql instances patch INSTANCE_NAME \
    --database-version=DATABASE_VERSION

    Las actualizaciones de versiones principales tardan varios minutos en completarse. Es posible que vea un mensaje indicando que la operación está tardando más de lo esperado. Puede ignorar este mensaje o ejecutar el comando gcloud sql operations wait para descartarlo.

  2. Obtener el nombre de la operación de actualización.

    Utilice el comando gcloud sql operations list con el indicador --instance .

    Antes de ejecutar el comando, reemplace la variable INSTANCE_NAME con el nombre de la instancia.

    gcloud sql operations list --instance=INSTANCE_NAME
  3. Supervisar el estado de la actualización.

    Utilice el comando gcloud sql operations describe .

    Antes de ejecutar el comando, reemplace la variable OPERATION con el nombre de la operación de actualización recuperado en el paso anterior.

    gcloud sql operations describe OPERATION

REST versión 1

  1. Iniciar la actualización en el lugar.

    Utilice una solicitud PATCH con el método instances:patch .

    Antes de utilizar cualquiera de los datos solicitados, reemplace estas variables:

    • PROJECT_ID : El ID del proyecto.
    • INSTANCE_NAME : El nombre de la instancia.

    Método HTTP y URL:

    PATCH https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances/INSTANCE_NAME

    Cuerpo JSON de la solicitud:

    {
      "databaseVersion": DATABASE_VERSION
    }

    Reemplace DATABASE_VERSION con la enumeración de la versión principal de la base de datos, que debe ser posterior a la versión actual. Especifique una versión de base de datos para una versión principal disponible como destino de actualización para la instancia. Puede obtener esta enumeración como primer paso de Planificar la actualización . Si necesita una lista completa de las enumeraciones de versiones de la base de datos, consulte SqlDatabaseVersion .

  2. Obtener el nombre de la operación de actualización.

    Utilice una solicitud GET con el método operations.list después de reemplazar PROJECT_ID con el ID del proyecto.

    Método HTTP y URL:

    GET https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/operations
  3. Supervisar el estado de la actualización.

    Utilice una solicitud GET con el método operations.get después de reemplazar las siguientes variables:

    • PROJECT_ID : El ID del proyecto.
    • OPERATION_NAME : El nombre de la operación de actualización recuperado en el paso anterior.

    Método HTTP y URL:

    GET https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/operation/OPERATION_NAME

Terraformar

Para actualizar la versión de la base de datos, utilice un recurso de Terraform y el proveedor de Terraform para Google Cloud, versión 4.34.0 o posterior .

resource "google_sql_database_instance" "instance" {
  name             = "postgres-instance"
  region           = "us-central1"
  database_version = "POSTGRES_14"
  settings {
    tier = "db-custom-2-7680"
  }
  # set `deletion_protection` to true, will ensure that one cannot accidentally delete this instance by
  # use of Terraform whereas `deletion_protection_enabled` flag protects this instance at the GCP level.
  deletion_protection = false
}

Aplicar los cambios

Para aplicar su configuración de Terraform en un Google Cloud proyecto, complete los pasos de las siguientes secciones.

Preparar Cloud Shell

  1. Inicie Cloud Shell .
  2. Establecer el valor predeterminado Google Cloud Proyecto donde desea aplicar sus configuraciones de Terraform.

    Solo necesitas ejecutar este comando una vez por proyecto y puedes ejecutarlo en cualquier directorio.

    export GOOGLE_CLOUD_PROJECT=PROJECT_ID

    Las variables de entorno se anulan si establece valores explícitos en el archivo de configuración de Terraform.

Preparar el directorio

Cada archivo de configuración de Terraform debe tener su propio directorio (también llamado módulo raíz ).

  1. En Cloud Shell , cree un directorio y un nuevo archivo dentro de él. El nombre del archivo debe tener la extensión .tf ; por ejemplo, main.tf En este tutorial, el archivo se denomina main.tf
    mkdir DIRECTORY && cd DIRECTORY && touch main.tf
  2. Si está siguiendo un tutorial, puede copiar el código de muestra en cada sección o paso.

    Copie el código de muestra en el main.tf recién creado.

    Opcionalmente, copie el código de GitHub. Esto se recomienda cuando el fragmento de Terraform forma parte de una solución integral.

  3. Revise y modifique los parámetros de muestra para aplicarlos a su entorno.
  4. Guarde sus cambios.
  5. Inicialice Terraform. Solo necesita hacerlo una vez por directorio.
    terraform init

    Opcionalmente, para utilizar la última versión del proveedor de Google, incluya la opción -upgrade :

    terraform init -upgrade

Aplicar los cambios

  1. Revise la configuración y verifique que los recursos que Terraform va a crear o actualizar coincidan con sus expectativas:
    terraform plan

    Realice correcciones en la configuración según sea necesario.

  2. Aplique la configuración de Terraform ejecutando el siguiente comando e ingresando yes en el indicador:
    terraform apply

    Espere hasta que Terraform muestre el mensaje "¡Aplicación completada!"

  3. Abre tu Google Cloud proyecto para ver los resultados. En el Google Cloud consola, navegue a sus recursos en la interfaz de usuario para asegurarse de que Terraform los haya creado o actualizado.

Eliminar los cambios

Para eliminar sus cambios, haga lo siguiente:

  1. Para deshabilitar la protección contra eliminación, en el archivo de configuración de Terraform configure el argumento deletion_protection en false .
    deletion_protection =  "false"
  2. Aplique la configuración actualizada de Terraform ejecutando el siguiente comando e ingresando yes en el mensaje:
    terraform apply
  1. Elimine los recursos aplicados previamente con su configuración de Terraform ejecutando el siguiente comando e ingresando yes en el mensaje:

    terraform destroy

Al solicitar una actualización local, Cloud SQL realiza primero una comprobación previa. Si Cloud SQL determina que su instancia no está lista para una actualización, la solicitud fallará y mostrará un mensaje que sugiere cómo solucionar el problema. Consulte también Solucionar problemas de una actualización de versión principal .

Incluir réplicas en la actualización de la versión principal

Si su instancia principal tiene réplicas, puede incluirlas todas en la actualización. Cloud SQL puede actualizar todas las réplicas de la instancia principal, incluidas las réplicas entre regiones y las réplicas en cascada.

Cuando incluye réplicas en una actualización de versión principal, Cloud SQL hace lo siguiente:

  1. Comprueba la configuración de la instancia principal y las réplicas para garantizar que la instancia y las réplicas sean compatibles para una actualización.
  2. Hace que su instancia principal no esté disponible.
  3. Realiza una copia de seguridad previa a la actualización de la instancia principal.
  4. Detiene la replicación de todas las réplicas.
  5. Realiza la actualización en la instancia principal.
  6. Si la actualización en la instancia principal es exitosa, la instancia principal vuelve a estar disponible y reinicia la replicación.
  7. Cloud SQL realiza una copia de seguridad de la instancia principal posterior a la actualización.
  8. Cloud SQL procede a actualizar todas las réplicas.

Incluso si falla la actualización de la versión principal de una réplica, la instancia principal continúa estando disponible.

Para incluir réplicas en una actualización de versión principal, no puede utilizar elGoogle Cloud Consola o Terraform. Solo puedes usar la CLI de gcloud o la API de administración de Cloud SQL.

nube g

  1. Iniciar la actualización.

    Utilice el comando gcloud sql instances patch con --database-version y el --include-replicas-for-major-version-upgrade indicadores.

    Antes de ejecutar el comando, reemplace lo siguiente:

    • INSTANCE_NAME : El nombre de la instancia principal.
    • DATABASE_VERSION : La enumeración de la versión principal de la base de datos, que debe ser posterior a la versión actual. Especifique una versión de base de datos para una versión principal disponible como destino de actualización para la instancia. Puede obtener esta enumeración como primer paso de "Planificar la actualización" . Si necesita una lista completa de las enumeraciones de versiones de la base de datos, consulte SqlDatabaseEnums .
    gcloud sql instances patch INSTANCE_NAME \
      --database-version=DATABASE_VERSION \
      --include-replicas-for-major-version-upgrade

    Las actualizaciones de versiones principales tardan varios minutos en completarse. Es posible que vea un mensaje indicando que la operación está tardando más de lo esperado. Puede ignorar este mensaje o ejecutar el comando gcloud sql operations wait para descartarlo. La actualización de réplicas puede tardar varios minutos. Para comprobar el estado de la actualización, haga lo siguiente:

  2. Obtener el nombre de la operación de actualización.

    Utilice el comando gcloud sql operations list con el indicador --instance .

    Antes de ejecutar el comando, reemplace la variable INSTANCE_NAME con el nombre de la instancia.

    gcloud sql operations list --instance=INSTANCE_NAME
  3. Supervisar el estado de la actualización.

    Utilice el comando gcloud sql operations describe .

    Antes de ejecutar el comando, reemplace la variable OPERATION con el nombre de la operación de actualización recuperado en el paso anterior.

    gcloud sql operations describe OPERATION

DESCANSAR

  1. Iniciar la actualización en el lugar.

    Utilice una solicitud PATCH con el método instances:patch .

    Antes de utilizar cualquiera de los datos solicitados, reemplace estas variables:

    • PROJECT_ID : El ID del proyecto.
    • INSTANCE_NAME : El nombre de la instancia.

    Método HTTP y URL:

    PATCH https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances/INSTANCE_NAME

    Cuerpo JSON de la solicitud:

    {
      "databaseVersion": DATABASE_VERSION
      "includeReplicasForMajorVersionUpgrade": true
    }

    • Reemplace DATABASE_VERSION con la enumeración de la versión principal de la base de datos, que debe ser posterior a la versión actual. Especifique una versión de base de datos para una versión principal disponible como destino de actualización para la instancia. Puede obtener esta enumeración como primer paso de Planificar la actualización . Si necesita una lista completa de las enumeraciones de versiones de la base de datos, consulte SqlDatabaseVersion .
    • En el campo includeReplicasForMajorVersionUpgrade , especifique true .

  2. Obtener el nombre de la operación de actualización.

    Utilice una solicitud GET con el método operations.list después de reemplazar PROJECT_ID con el ID del proyecto.

    Método HTTP y URL:

    GET https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/operations
  3. Supervisar el estado de la actualización.

    Utilice una solicitud GET con el método operations.get después de reemplazar las siguientes variables:

    • PROJECT_ID : El ID del proyecto.
    • OPERATION_NAME : El nombre de la operación de actualización recuperado en el paso anterior.

    Método HTTP y URL:

    GET https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/operation/OPERATION_NAME

Copias de seguridad de actualización automáticas

Cuando realiza una actualización de versión importante, Cloud SQL realiza automáticamente dos copias de seguridad a pedido, denominadas copias de seguridad de actualización:

  • La primera copia de seguridad de la actualización es la copia de seguridad previa a la actualización, que se realiza justo antes de iniciarla. Puede usar esta copia de seguridad para restaurar la instancia de la base de datos a su estado original.
  • La segunda copia de seguridad de actualización es la copia de seguridad posterior a la actualización , que se realiza inmediatamente después de que se permiten nuevas escrituras en la instancia de base de datos actualizada.

Al consultar la lista de copias de seguridad , las de actualización se muestran como " On-demand . Estas copias de seguridad están etiquetadas para que pueda identificarlas rápidamente. Por ejemplo, si actualiza de PostgreSQL 14 a PostgreSQL 15, la copia de seguridad previa a la actualización se etiqueta como Pre-upgrade backup, POSTGRES_14 to POSTGRES_15. y la copia de seguridad posterior a la actualización se etiqueta como Post-upgrade backup, POSTGRES_14 to POSTGRES_15.

Al igual que con otras copias de seguridad bajo demanda, las copias de seguridad de actualización se conservan hasta que las elimine o hasta que elimine la instancia. Si tiene PITR habilitado, no podrá eliminar las copias de seguridad de actualización mientras estén dentro del período de retención. Si necesita eliminarlas, debe deshabilitar PITR o esperar a que finalicen el período de retención.

Completar la actualización de la versión principal

Después de terminar de actualizar su instancia principal, realice los siguientes pasos para completar la actualización:

  1. Actualizar las estadísticas de la base de datos.

    Ejecute ANALYZE en su instancia principal para actualizar las estadísticas del sistema después de la actualización. Unas estadísticas precisas garantizan que el planificador de consultas de PostgreSQL procese las consultas de forma óptima. La falta de estadísticas puede generar planes de consulta incorrectos, lo que a su vez podría reducir el rendimiento y ocupar demasiada memoria.

  2. Realizar pruebas de aceptación.

    Ejecute pruebas para garantizar que el sistema actualizado funcione como se espera.

Solucionar problemas de una actualización de versión importante

Cloud SQL devuelve un mensaje de error si intenta un comando de actualización no válido, por ejemplo, si su instancia contiene indicadores de base de datos no válidos para la nueva versión.

Si su solicitud de actualización falla, verifique su sintaxis. Si la solicitud tiene una estructura válida, consulte las siguientes sugerencias.

Ver fallas de verificación previas a la actualización

Los fallos de comprobación previos a la actualización son problemas o errores que Cloud SQL detecta durante el proceso de verificación o validación previo a la actualización. Estos fallos se producen antes de que comience el proceso de actualización y su objetivo es identificar posibles problemas o incompatibilidades que puedan afectar el éxito de la actualización.

Las fallas de verificación previa a la actualización se muestran para las siguientes categorías:

  • Extensiones incompatibles: detecta extensiones de PostgreSQL que no son compatibles con la versión de destino de la instancia.
  • Dependencias no compatibles: identifica las dependencias que ya no son compatibles o que necesitan actualizarse.
  • Incompatibilidades de formato de datos: verificar inconsistencias de datos que surgen de varios factores, incluidas diferencias en estructuras de datos específicas de la versión, alteraciones en la codificación y la intercalación, modificaciones en los tipos de datos y ajustes en el catálogo del sistema.

La siguiente tabla enumera los fallos de comprobación previos a la actualización y sus mensajes de error:

Error en la comprobación previa a la actualización Mensaje de error
Cloud SQL detecta un tipo de datos desconocido. Please remove the following usages of 'Unknown' data types before attempting an upgrade: (database: db_name, relation: rel_name, attribute: attr_name)
Al actualizar a PostgreSQL 12 o versiones posteriores, Cloud SQL detecta el tipo de datos 'sql_identifier' . Please remove the following usages of 'sql_identifier' data types before attempting an upgrade: (database: db_name, relation: rel_name, attribute: attr_name)
Cloud SQL detecta el tipo de datos reg* . Please remove the following usages of 'reg*' data types before attempting an upgrade: (database: db_name, relation: rel_name, attribute: attr_name)
Cloud SQL detecta que el
El valor LC_COLLATE para la base de datos postgres es un conjunto de caracteres distinto de en_US.UTF8 .
Please change the 'LC_COLLATE' value of the postgres database to 'en_US.UTF8' before attempting an upgrade
Cloud SQL detecta tablas que tienen identificadores de objeto (OID). Please remove the following usages of tables with OIDs before attempting an upgrade: (database: db_name, relation: rel_name)
Cloud SQL detecta tipos de datos compuestos. Please remove the following usages of 'composite' data types before attempting an upgrade: (database: db_name, relation: rel_name, attribute: attr_name)
Cloud SQL detecta operadores de sufijo definidos por el usuario. Please remove the following usages of 'postfix operators' before attempting an upgrade: (database: db_name, operation id: op_id, operation namespace: op_namespace, operation name: op_name, type namespace: type_namespace, type name: type_name)
Cloud SQL detecta funciones polimórficas incompatibles. Please remove the following usages of 'incompatible polymorphic' functions before attempting an upgrade: (database: db_name, object kind: obj_kind, object name: obj_name)
Cloud SQL detecta conversiones de codificación definidas por el usuario. Please remove the following usages of user-defined encoding conversions before attempting an upgrade: (database: db_name, namespace name: namespace_name, encoding conversions name: encod_name)
Cloud SQL detecta una ruta de búsqueda vacía para la función ll_to_earth Please update the search path of the 'll_to_earth' function
Cloud SQL detecta la presencia de archivos ráster PostGIS descomprimidos. PostGIS version upgrade has not been completed, unpackaged raster files present. Follow the steps at https://postgis.net/documentation/tips/tip-removing-raster-from-2-3/ to fix before major version upgrade.

Solucionar el problema de la ruta de búsqueda vacía

Esto se debe a que la extensión earthdistance utiliza los tipos Earth y Cube sin especificar la ruta de búsqueda de la función. Debe especificar esta ruta, que es necesaria durante el proceso de actualización.

Para resolver este problema, corrija la ruta de búsqueda de la función ll_to_earth ejecutando esta consulta: ALTER FUNCTION ll_to_earth SET search_path = public;

Ver registros de actualización

Si ocurre algún problema con una solicitud de actualización válida, Cloud SQL publica registros de errores en projects/ PROJECT_ID /logs/cloudsql.googleapis.com%2Fpostgres-upgrade.log upgrade.log. Cada entrada del registro contiene una etiqueta con el identificador de la instancia para ayudarle a identificar la instancia con el error de actualización. Busque estos errores de actualización y resuélvalos.

Para ver los registros de errores, siga estos pasos:

  1. En el Google Cloud consola, vaya a la página Instancias de Cloud SQL .

    Ir a Instancias de Cloud SQL

  2. Para abrir la página Descripción general de una instancia, haga clic en el nombre de la instancia.
  3. En el panel Operaciones y registros de la página Descripción general de la instancia, haga clic en el vínculo Ver registros de errores de PostgreSQL .

    Se abre la página del Explorador de registros .

  4. Ver registros de la siguiente manera:

    • Para enumerar todos los registros de errores de un proyecto, seleccione el nombre del registro en el filtro de registro Nombre del registro .

    Para obtener más información sobre los filtros de consulta, consulte Consultas avanzadas .

    • Para filtrar los registros de errores de actualización de una sola instancia, ingrese la siguiente consulta en el cuadro Buscar en todos los campos , después de reemplazar DATABASE_ID

    con el ID del proyecto seguido del nombre de la instancia en este formato: project_id:instance_name .

    resource.type="cloudsql_database"
    resource.labels.database_id="DATABASE_ID"
    logName : "projects/PROJECT_ID/logs/cloudsql.googleapis.com%2Fpostgres-upgrade.log"

    Por ejemplo, para filtrar los registros de errores de actualización por una instancia llamada shopping-db que se ejecuta en el proyecto buylots , utilice el siguiente filtro de consulta:

     resource.type="cloudsql_database"
     resource.labels.database_id="buylots:shopping-db"
     logName : "projects/buylots/logs/cloudsql.googleapis.com%2Fpostgres-upgrade.log"

Las entradas de registro con el prefijo pg_upgrade_dump indican que se produjo un error de actualización. Por ejemplo:

pg_upgrade_dump: error: query failed: ERROR: out of shared memory
HINT: You might need to increase max_locks_per_transaction.

Además, las entradas de registro etiquetadas con un nombre de archivo secundario .txt pueden enumerar otros errores que quizás desee resolver antes de intentar la actualización nuevamente.

Todos los nombres de archivo se encuentran en el archivo postgres-upgrade.log . Para localizar un nombre de archivo, consulte el campo labels.FILE_NAME .

Los nombres de archivos que podrían contener errores a resolver incluyen:

  • tables_with_oids.txt: Este archivo contiene tablas listadas con identificadores de objeto (OID). Elimine las tablas o modifíquelas para que no utilicen OID.
  • tables_using_composite.txt: Este archivo contiene tablas que se listan usando tipos compuestos definidos por el sistema. Elimine las tablas o modifíquelas para que no usen estos tipos compuestos.
  • tables_using_unknown.txt: Este archivo contiene tablas que usan el tipo de dato UNKNOWN . Elimine las tablas o modifíquelas para que no usen este tipo de dato.
  • tables_using_sql_identifier.txt: Este archivo contiene tablas que se listan con el tipo de dato SQL_IDENTIFIER . Elimine las tablas o modifíquelas para que no utilicen este tipo de dato.
  • tables_using_reg.txt: Este archivo contiene tablas que se listan usando el tipo de dato REG* (por ejemplo, REGCOLLATION o REGNAMESPACE ). Elimine las tablas o modifíquelas para que no usen este tipo de dato.
  • postfix_ops.txt: Este archivo contiene tablas que se listan mediante operadores sufijos (uniarios por la derecha). Elimine las tablas o modifíquelas para que no utilicen estos operadores.

Comprueba la memoria

Si la instancia no tiene suficiente memoria compartida, podría aparecer este mensaje de error: ERROR: out of shared memory. Este error es más probable si tiene más de 10 000 tablas.

Antes de intentar una actualización, configure el valor del indicador max_locks_per_transaction en aproximadamente el doble del número de tablas de la instancia. La instancia se reinicia al cambiar el valor de este indicador.

Verifique la capacidad de las conexiones

Si su instancia no tiene suficiente capacidad de conexión, es posible que vea este mensaje de error: ERROR: Insufficient connections.

Cloud SQL recomienda aumentar el valor del indicador max_connections según el número de bases de datos de la instancia. La instancia se reinicia al cambiar el valor de este indicador.

Comprobar si hay una referencia de columna ambigua

Si tiene una referencia de columna ambigua en sus vistas, podría ver este mensaje de error: ERROR: column reference "<column_name>" is ambiguous . Este problema se produce cuando una nueva versión de PostgreSQL introduce cambios en la estructura de las vistas del catálogo del sistema, como pg_stat_activity y pg_stat_replication . Esto puede afectar a las vistas personalizadas que dependen del orden de las columnas.

Para comprobar este mensaje de error, agregue esta consulta al editor de consultas: textPayload =~ "ERROR: column reference .+ is ambiguous at character \d+"

Puede resolver este problema de las siguientes maneras:

  1. Adapte sus vistas personalizadas.

    Actualice las referencias de columnas en sus vistas personalizadas para alinearlas con la nueva definición de vista de catálogo del sistema (como pg_stat_activity y pg_stat_replication ) en la versión de PostgreSQL de destino.

  2. Recrea tus vistas.

    Elimine las vistas personalizadas antes de realizar una actualización importante. Vuelva a crearlas una vez finalizada la actualización, asegurándose de que sean compatibles con la nueva estructura.

Para ver un ejemplo más detallado del problema y obtener más información, consulte esta discusión de desbordamiento de pila.

Comprobar si hay SRF en las declaraciones CASE

Si actualiza su instancia desde la versión 9.6 y usa funciones que devuelven conjuntos en sus sentencias CASE, podría ver el siguiente mensaje de error ERROR: set-returning functions are not allowed in CASE . Este problema ocurre a partir de la versión 10, donde no se permite usar funciones que devuelven conjuntos en sentencias CASE.

Para resolver este problema y actualizar la instancia correctamente, asegúrese de modificar cualquier sentencia CASE que utilice funciones que devuelvan conjuntos para evitar su uso antes de reintentar la actualización. Algunas SRF de uso común son las siguientes:

  • desanidar()
  • generar_serie()
  • matriz_agg()
  • regexp_split_to_table()
  • elementos de matriz jsonb()
  • elementos_de_matriz_json()
  • sonb_each()
  • json_each()

Verificar vistas creadas en moldes personalizados

Si tiene una vista creada en una conversión personalizada, aparecerá un mensaje de error similar al siguiente: ERROR: cannot cast type <type_1> to <type_2> . Este problema se debe a problemas de permisos en las conversiones personalizadas.

Para resolver este problema, actualice su instancia a [PostgreSQL version].R20240910.01_02

Para obtener más información, consulte Mantenimiento de autoservicio .

Comprobar la propiedad del activador de eventos

Si un disparador de eventos pertenece a un usuario sin el rol cloudsqlsuperuser, podría aparecer un mensaje de error como ERROR: permission denied to change owner of event trigger "<trigger_name>" . Este problema se debe a problemas de permisos al intentar recrear estos disparadores durante la actualización. Puede agregar la siguiente consulta en el editor de consultas para comprobar si aparece este mensaje de error textPayload =~ "ERROR: permission denied to change owner of event trigger .+ "

Para solucionar esto, verifique la propiedad de todos los desencadenadores de eventos en su instancia. Asegúrese de que el propietario de cada desencadenador sea un superusuario de cloudsql. Si algún desencadenador pertenece a otros usuarios, actualice su propiedad a un superusuario de cloudsql antes de intentar la actualización de nuevo. Puede usar la siguiente consulta para cambiar la propiedad ALTER EVENT TRIGGER <trigger_name> OWNER TO <cloudsqlsuperuser>;

Puede utilizar la siguiente consulta para obtener una lista de desencadenadores de eventos y los detalles del propietario SELECT evtname AS trigger_name, evtowner::regrole AS owner FROM pg_event_trigger;

Comprobar columnas generadas desde tablas no registradas

Si tiene una tabla sin registro que ha generado columnas, podría ver el mensaje de error ERROR: unexpected request for new relfilenumber in binary upgrade mode . Este problema se produce debido a discrepancias en las características de persistencia entre las tablas y sus secuencias para las columnas generadas.

Para solucionar este problema, haga lo siguiente:

  1. Eliminar tablas sin registro: si es posible, elimine las tablas sin registro vinculadas a las columnas generadas. Asegúrese de que la pérdida de datos se pueda mitigar de forma segura antes de continuar.
  2. Convertir a tablas permanentes: convierta temporalmente las tablas no registradas en tablas permanentes siguiendo los siguientes pasos:
    1. Convertir la tabla en una tabla registrada ALTER TABLE SET LOGGED;
    2. Realizar una actualización de versión principal
    3. Convierte la tabla nuevamente en una tabla no registrada ALTER TABLE SET UNLOGGED

Puede identificar todas estas tablas utilizando la siguiente consulta:

SELECT
  relnamespace::regnamespace,
  c.relname AS table_name,
  a.attname AS column_name,
  a.attidentity AS identity_type
FROM
  pg_catalog.pg_class c
  JOIN pg_catalog.pg_attribute a ON a.attrelid = c.oid
WHERE
  a.attidentity IN ('a', 'd') AND c.relkind = 'r' AND c.relpersistence = 'u'
ORDER BY c.relname, a.attname;

Verifique las banderas personalizadas para su instancia de PostgreSQL

Si actualiza a una instancia de PostgreSQL, versión 14 o superior, verifique los nombres de las marcas de base de datos personalizadas que haya configurado para la instancia. Esto se debe a que PostgreSQL impuso restricciones adicionales a los nombres permitidos para los parámetros personalizados .

El primer carácter de una bandera de base de datos personalizada debe ser alfabético (AZ o az). Todos los caracteres posteriores pueden ser alfanuméricos, el guión bajo (_) o el signo de dólar ($).

Eliminar extensiones

Si está actualizando su instancia de Cloud SQL, es posible que vea este mensaje de error: pg_restore: error: could not execute query: ERROR: role "16447" does not exist .

Para resolver este problema, siga estos pasos:

  1. Elimine las extensiones pg_stat_statements y pgstattuple .
  2. Realizar la actualización.
  3. Reinstalar las extensiones.

Restaurar la instancia principal a la versión principal anterior

Si su sistema de base de datos actualizado no funciona como se esperaba, es posible que deba restaurar la instancia principal a la versión anterior. Para ello, restaure la copia de seguridad previa a la actualización a una instancia de recuperación de Cloud SQL, que es una instancia nueva que ejecuta la versión anterior a la actualización.

Para restaurar una instancia principal a la versión anterior, realice los siguientes pasos:

  1. Identifique su copia de seguridad previa a la actualización.

    Consulte Copias de seguridad de actualización automática .

  2. Crear una instancia de recuperación.

    Cree una nueva instancia de Cloud SQL con la versión principal que Cloud SQL estaba ejecutando al realizar la copia de seguridad previa a la actualización. Configure los mismos indicadores y la misma configuración de instancia que la instancia original.

  3. Restaure su copia de seguridad previa a la actualización.

    Restaure la copia de seguridad previa a la actualización en la instancia de recuperación. Esto podría tardar varios minutos.

  4. Añade tus réplicas de lectura.

    Si está utilizando réplicas de lectura, agréguelas individualmente.

  5. Conecte su aplicación.

    Tras recuperar su sistema de base de datos, actualice su aplicación con los detalles de la instancia de recuperación y sus réplicas de lectura. Puede reanudar el servicio de tráfico en la versión anterior a la actualización de su base de datos.

Preguntas frecuentes

Las siguientes preguntas pueden surgir al actualizar la versión principal de la base de datos.

¿Mi instancia no está disponible durante una actualización?
Sí. Su instancia permanecerá no disponible durante un período de tiempo mientras Cloud SQL realiza la actualización.
¿Cuánto tiempo tarda una actualización?

Actualizar una sola instancia suele tardar menos de 10 minutos. Si la configuración de su instancia tiene pocas vCPU o memoria, la actualización podría tardar más.

Si su instancia aloja demasiadas bases de datos o tablas, o si sus bases de datos son muy grandes, la actualización podría tardar horas o incluso agotar el tiempo de espera, ya que el tiempo total de actualización corresponde a la cantidad de objetos en sus bases de datos. Si tiene varias instancias que necesitan actualizarse, el tiempo de actualización aumenta proporcionalmente. Si incluye réplicas en la actualización, la operación puede tardar hasta una hora en completarse, dependiendo de la cantidad de réplicas que tenga su instancia principal.

¿Puedo supervisar cada paso de mi proceso de actualización?
Si bien Cloud SQL le permite monitorear si una operación de actualización aún está en progreso, no puede rastrear los pasos individuales en cada actualización.
¿Puedo cancelar mi actualización después de haberla iniciado?
No, no se puede cancelar una actualización una vez iniciada. Si la actualización falla, Cloud SQL recupera automáticamente la instancia a la versión anterior.
¿Qué sucede con mi configuración durante una actualización?

Cuando realiza una actualización de versión principal en el lugar, Cloud SQL conserva la configuración de su base de datos, incluido el nombre de su instancia, la dirección IP, los valores de indicador configurados explícitamente y los datos del usuario. Sin embargo, el valor predeterminado de las variables del sistema podría cambiar. Por ejemplo, el valor predeterminado del indicador password_encryption en PostgreSQL 13 y anterior es md5 . Cuando se actualiza a PostgreSQL 14, el valor predeterminado de este indicador cambia a scram-sha-256 .

Para obtener más información, consulte los indicadores de configuración de la base de datos . Si ya no se admite un cierto indicador o valor en su versión de destino, entonces Cloud SQL elimina automáticamente el indicador durante la actualización.

¿Qué sigue?