#Симптом и границы применимости
После обновления PostgreSQL расширение, установленное в старом кластере, не загружается или сообщает о несовместимой библиотеке. Нужны отдельно серверный пакет модуля для новой основной версии, SQL-версия расширения и проверка зависимостей.
#Как отличить возможные причины
| Возможная причина | Как узнать | Что делать |
|---|---|---|
| Нет бинарного модуляФайл расширения в каталоге нового сервера отсутствует или несовместим по версии. | could not access file либо incompatible library | Установить соответствующий серверу пакет |
| Не выполнено обновление SQL-версииВ базе версия расширения старее доступной. | extversion не совпадает с available версии | Проверить путь обновления |
| Ошибка зависимостейДругое расширение или схема недоступны. | CREATE/ALTER EXTENSION сообщает dependency error | Сверить зависимости |
#Пошаговая диагностика и безопасное исправление
- 1. Сохраните полную ошибку и версию сервераОткройте журналы PostgreSQL и сохраните имя расширения, текст ошибки, путь к библиотеке. В psql соединитесь с нужной базой и узнайте серверную версию; версия клиентской утилиты psql может отличаться.
- psql, чтение версии сервераSQLКомандаpsql, чтение версии сервера.
SELECT version();
- 2. Снимите резервную копию перед любым обновлениемСделайте согласованный дамп нужной базы и проверку восстановления на отдельном экземпляре соответствующей версии. Не удаляйте расширение с CASCADE: при этом могут удалиться зависящие объекты приложения.
- 3. Узнайте фактически установленную версиюВ нужной базе через psql выполните запрос к pg_extension и доступным версиям. Если строка отсутствует, расширение вообще не создано в этой базе.
- psql; чтениеSQLКомандаpsql; чтение. Показывает доступные файлы расширений именно на данном сервере.
SELECT extname, extversion FROM pg_extension ORDER BY extname;SELECT name, default_version, installed_version FROM pg_available_extensions ORDER BY name;
- 4. Проверьте соответствие системных пакетовНа Linux определите используемый исполняемый файл postgres и каталог библиотек для этой версии. Пакет расширения должен соответствовать версии PostgreSQL и архитектуре. На управляемом облаке список поддерживаемых расширений устанавливает провайдер.
- psql, чтениеSQLКомандаpsql, чтение. Сравните версию с пакетом расширения из официального репозитория вашей ОС.
SELECT current_setting('server_version') AS server_version;
- 5. Испытайте обновление на копииКогда совместимая версия расширения установлена в тестовом кластере, владелец расширения может оценить доступные пути обновления и выполнить ALTER EXTENSION ... UPDATE с нужной версией, если скрипт обновления существует. Не делать это в рабочей базе до теста.
- 6. Проверяйте зависимости после обновленияВ тесте запустите операции приложения, которые используют типы и функции расширения; запишите старую и новую версии. Если функция исчезла, изучите примечания выпуска расширения, а не меняйте глобальный search_path наугад.
- 7. Обновляйте рабочую базу по плануСогласуйте совместимые версии, окно обслуживания, копию и путь отката через восстановление. Проверьте журналы, доступность SQL-функций и исправность репликации после изменения.
#Как проверить, что проблема устранена
pg_extension отражает нужную extversion, тестовые запросы расширения работают, в журнале нет ошибок загрузки.
#Если исправление не помогло
Сохраните полный текст ошибки, версию сервера и название пакета; для стороннего расширения обратитесь к поставщику. Нельзя просто копировать .so между основными версиями PostgreSQL.