Gcloud SQL Postgres 13 обновление на месте завершается неудачей для сортировки ‘en_US.UTF-8’

Вопрос или проблема

Я пытаюсь выполнить обновление базы данных Postgres 12 в Google Cloud до версии 13. Однако я получаю следующую ошибку:

проверка перед обновлением не удалась: [подробности:"Пожалуйста, измените значение 'LC_COLLATE' базы данных postgres на 'en_US.UTF8' перед попыткой обновления: (база данных: postgres, datcollate: en_US.UTF-8) "]

Я увидел в документации, что для обновления сопоставление должно быть en_US.UTF8:

https://cloud.google.com/sql/docs/postgres/upgrade-major-db-version-inplace#prepare-upgrade

Кажется, единственное отличие – это - в названии, но само сопоставление должно быть в порядке.

Есть ли способ обойти это? Могу ли я как-то исправить текущее сопоставление?

Ответ или решение

При выполнении процесса обновления PostgreSQL 12 на 13 версии в Google Cloud SQL вы столкнулись с ошибкой, связанной с неподходящей настройкой колляции базы данных: «pre-upgrade check failed: [detail:"Please change the ‘LC_COLLATE’ value of the postgres database to ‘en_US.UTF8’ before attempting an upgrade: (database: postgres, datcollate: en_US.UTF-8)"]». Это сообщение об ошибке указывает на то, что для успешного выполнения обновления необходимо изменить значение параметра LC_COLLATE на en_US.UTF8.

Суть проблемы

Хотя на первый взгляд кажется, что разница между en_US.UTF-8 и en_US.UTF8 заключается лишь в присутствии дефиса, на самом деле, это разные значения. PostgreSQL требует строгого соответствия форматов, и если базой данных установлен не правильный формат, это останавливает процесс обновления.

Рекомендованные шаги для решения проблемы

Для решения данной проблемы необходимо изменить колляцию вашей базы данных. К сожалению, изменить колляцию базы данных "на лету" невозможно. Однако вы можете воспользоваться следующими шагами:

  1. Создание новой базы данных с нужной колляцией:

    • Создайте новую базу данных с корректной колляцией:
      CREATE DATABASE new_database_name WITH LC_COLLATE='en_US.UTF8' LC_CTYPE='en_US.UTF8' TEMPLATE=template0 ENCODING='UTF8';
  2. Перенос данных:

    • Перенесите данные из старой базы данных в новую. Это можно сделать с помощью утилиты pg_dump и pg_restore:
      pg_dump -U username -h hostname old_database_name > dump.sql
      psql -U username -h hostname new_database_name < dump.sql
  3. Проверка и удаление старой базы:

    • Убедитесь, что данные успешно перенесены, и проведите тесты для проверки целостности данных. После этого вы можете удалить старую базу данных:
      DROP DATABASE old_database_name;
  4. Переименование новой базы:

    • Если необходимо, вы можете переименовать новую базу данных обратно в старое имя:
      ALTER DATABASE new_database_name RENAME TO old_database_name;

Заключение

Хотя корректировка колляции требует дополнительных усилий, следуя приведенным выше шагам, вы сможете успешно изменить колляцию вашей базы данных и выполнить обновление PostgreSQL до версии 13. Важно соблюдать форматы значений колляции, так как они строго проверяются PostgreSQL во время обновлений. Если у вас возникнут дополнительные проблемы, рекомендуется обратиться к документации Google Cloud SQL или на специализированные форумы для получения дополнительной информации.

Оцените материал
Добавить комментарий

Капча загружается...