Установка PostgreSQL на OSX 10.11.6: решение ошибки с icu4c@76

Если вы работаете с PostgreSQL на macOS El Capitan (10.11.6), возможно, столкнулись с проблемой при обновлении или переустановке версии 14. Основная сложность — зависимость от библиотеки icu4c@76, которая не компилируется на этой системе из-за устаревших инструментов разработки. Вместо того чтобы тратить часы на поиски обходных путей в Homebrew, есть более эффективные подходы, которые сохранят ваше время и нервы.

Почему возникает ошибка и как с этим работать

Современные пакеты вроде PostgreSQL@14 часто требуют актуальных версий библиотек, которые могут быть несовместимы со старыми ОС. В случае с icu4c@76 ошибки компиляции (как в логе ниже) связаны с изменениями в синтаксисе C++ и отсутствием поддержки определенных флагов в старых версиях Clang на macOS 10.11:

../common/unicode/localpointer.h:551:68: note: expanded from macro 'U_DEFINE_LOCAL_OPEN_POINTER'  
    using LocalPointerClassName = internal::LocalOpenPointer<Type, closeFunction>  
                                                                   ^~~~~~~~~~~~~  
2 errors generated.  

Здесь компилятор не понимает новые шаблоны, используемые в icu4c@76. Попытки игнорировать зависимости через --no-dependency или откат Homebrew редко помогают, так как репозитории постепенно удаляют старые формулы. Кстати, если вы уже пробовали эти методы без результата, не переживайте — это системная проблема, а не ваша ошибка.

Переход на MacPorts: простое решение для устаревших систем

MacPorts — альтернативный менеджер пакетов для macOS, который поддерживает широкий спектр версий ОС, включая El Capitan. В отличие от Homebrew, он компилирует зависимости из исходников с учетом специфики вашей системы, что часто решает проблемы с совместимостью.

Вот как перейти на MacPorts и установить PostgreSQL@14:

1. Удалите конфликтующие пакеты Homebrew (если они есть):

brew uninstall postgresql@14 icu4c@76

2. Установите MacPorts:

  • Скачайте установщик для вашей версии OSX с официального сайта.
  • Запустите файл .pkg и следуйте инструкциям.

3. Обновите базу пакетов:

sudo port -v selfupdate

4. Установите PostgreSQL@14:

sudo port install postgresql14-server

5. Инициализируйте базу данных и запустите сервис:

sudo mkdir -p /opt/local/var/db/postgresql14/defaultdb  
sudo chown postgres:postgres /opt/local/var/db/postgresql14/defaultdb  
sudo su postgres -c '/opt/local/lib/postgresql14/bin/initdb -D /opt/local/var/db/postgresql14/defaultdb'  
sudo port load postgresql14-server

После этого PostgreSQL будет доступен через порт 5432. Чтобы проверить статус, используйте:

sudo port echo postgresql14-server

Дополнительные советы и тонкости

  • Миграция данных. Если у вас есть резервные копии баз данных из старой установки, скопируйте их в новую директорию /opt/local/var/db/postgresql14/.
  • Обновление пакетов. MacPorts хранит файлы в /opt/local/, что изолирует их от системных библиотек. Это снижает риски поломки зависимостей.
  • Альтернативные пакеты. Через MacPorts можно установить и другие утилиты, которые перестали работать в Homebrew (например, bind9 или wget), используя команду sudo port install <имя_пакета>.

Обратите внимание: если вы планируете использовать оба менеджера (Homebrew и MacPorts), добавьте пути MacPorts в переменную PATH перед Homebrew, чтобы избежать путаницы:

export PATH="/opt/local/bin:/opt/local/sbin:$PATH"

Подводя итог, переход на MacPorts — не просто «костыль», а полноценное решение для работы со старыми системами. Он позволяет сохранить функциональность без обновления ОС, что особенно актуально для legacy-проектов. Если возникнут сложности с настройкой, смело проверяйте логи в /opt/local/var/macports/logs/ — там подробно описаны все этапы компиляции.

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

Все поля обязательны к заполнению. Ваш адрес email не будет виден никому.

Новое
Интересное