Вопрос или проблема
Я пытаюсь выполнить обновление базы данных 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 требует строгого соответствия форматов, и если базой данных установлен не правильный формат, это останавливает процесс обновления.
Рекомендованные шаги для решения проблемы
Для решения данной проблемы необходимо изменить колляцию вашей базы данных. К сожалению, изменить колляцию базы данных "на лету" невозможно. Однако вы можете воспользоваться следующими шагами:
-
Создание новой базы данных с нужной колляцией:
- Создайте новую базу данных с корректной колляцией:
CREATE DATABASE new_database_name WITH LC_COLLATE='en_US.UTF8' LC_CTYPE='en_US.UTF8' TEMPLATE=template0 ENCODING='UTF8';
- Создайте новую базу данных с корректной колляцией:
-
Перенос данных:
- Перенесите данные из старой базы данных в новую. Это можно сделать с помощью утилиты
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
- Перенесите данные из старой базы данных в новую. Это можно сделать с помощью утилиты
-
Проверка и удаление старой базы:
- Убедитесь, что данные успешно перенесены, и проведите тесты для проверки целостности данных. После этого вы можете удалить старую базу данных:
DROP DATABASE old_database_name;
- Убедитесь, что данные успешно перенесены, и проведите тесты для проверки целостности данных. После этого вы можете удалить старую базу данных:
-
Переименование новой базы:
- Если необходимо, вы можете переименовать новую базу данных обратно в старое имя:
ALTER DATABASE new_database_name RENAME TO old_database_name;
- Если необходимо, вы можете переименовать новую базу данных обратно в старое имя:
Заключение
Хотя корректировка колляции требует дополнительных усилий, следуя приведенным выше шагам, вы сможете успешно изменить колляцию вашей базы данных и выполнить обновление PostgreSQL до версии 13. Важно соблюдать форматы значений колляции, так как они строго проверяются PostgreSQL во время обновлений. Если у вас возникнут дополнительные проблемы, рекомендуется обратиться к документации Google Cloud SQL или на специализированные форумы для получения дополнительной информации.