17.7. Замечания по отдельным платформам
В этом разделе приведены дополнительные замечания по отдельным платформам, связанные с установкой и подготовкой к работе PostgreSQL. Обязательно изучите ещё инструкции по установке, в частности Раздел 17.2. Также обратитесь к Главе 33, где рассказывается, как прочитать результаты регрессионных тестов.
Если какие-то платформы здесь не упоминаются, значит каких-либо известных особенностей установки в них нет.
17.7.1. AIX
Для сборки PostgreSQL на платформе AIX можно использовать GCC или собственный компилятор IBM — xlc
.
Версии AIX ниже 7.1 больше не тестируются и не поддерживаются сообществом PostgreSQL.
17.7.1.1. Управление памятью
Иногда управление памятью в AIX может работать несколько странно. В системе может быть свободно несколько гигабайт ОЗУ, но при запуске приложений всё равно возможны ошибки, связанные с адресным пространством или нехваткой памяти. В частности, необычные ошибки могут возникать при загрузке расширений. Например, при выполнении от имени владельца инсталляции PostgreSQL:
=# CREATE EXTENSION plperl; ERROR: could not load library "/opt/dbs/pgsql/lib/plperl.so": A memory address is not in the address space for the process.
(ОШИБКА: не удалось загрузить библиотеку "/opt/dbs/pgsql/lib/plperl.so": Адрес памяти находится не в адресном пространстве процесса.) При выполнении от имени не владельца, а члена группы-владельца инсталляции PostgreSQL:
=# CREATE EXTENSION plperl; ERROR: could not load library "/opt/dbs/pgsql/lib/plperl.so": Bad address
(ОШИБКА: не удалось загрузить библиотеку "/opt/dbs/pgsql/lib/plperl.so": Неверный адрес) Также сообщения о нехватке могут появляться в журнале PostgreSQL при попытке выделить блок памяти размером около 256 МиБ или больше.
Общая причина всех этих проблем связана с битностью и моделью памяти серверного процесса. По умолчанию все исполняемые файлы для AIX собираются как 32-битные, вне зависимости от того, какой тип оборудования или ядра используется. Такие 32-битные процессы ограничиваются общим пространством в 4 ГиБ, разделённым на сегменты по 256 МиБ, по одной из нескольких моделей. По умолчанию в куче можно выделить меньше 256 МиБ, так как она разделяет один сегмент со стеком.
В ситуации с показанным выше примером plperl
проверьте umask и разрешения, назначенные для двоичных файлов в вашей инсталляции PostgreSQL. Задействованные в данном примере двоичные файлы были 32-битными и установились с режимом 750 вместо 755. Из-за таких разрешений только владелец или член группы-владельца могли загрузить требуемую библиотеку. Так как она недоступна для чтения всем, загрузчик помещал этот объект в область кучи процесса, а не в сегменты разделяемых библиотек, где он должен находиться.
В «идеале» эту проблему можно решить, если использовать 64-битную сборку PostgreSQL, но это не всегда практично, так как с 32-битным процессором нельзя будет запустить 64-битный код (можно только собрать).
При желании использовать 32-битную версию сервера установите в LDR_CNTRL
значение MAXDATA=0x
, где 1 <= n <= 8, до запуска PostgreSQL, и попробуйте подобрать подходящее значение и параметры n
0000000postgresql.conf
. Переменная окружения LDR_CNTRL
говорит AIX, что вы хотите, чтобы сервер получил MAXDATA
байт для области кучи, в сегментах по 256 МиБ. Подобрав рабочее значение, можно воспользоваться ldedit
и модифицировать двоичные файлы, чтобы они использовали такой размер кучи по умолчанию. Тот же эффект можно получить, пересобрав PostgreSQL с указанием configure LDFLAGS="-Wl,-bmaxdata:0x
.n
0000000"
Для 64-битной сборки определите переменную OBJECT_MODE
со значением 64 и передайте configure
указания CC="gcc -maix64"
и LDFLAGS="-Wl,-bbigtoc"
. (Для xlc
параметры могут быть другими.) Если нужное значение OBJECT_MODE
не будет экспортировано, при сборке могут произойти ошибки на стадии компоновки. Когда переменная OBJECT_MODE
установлена, она говорит сборочным утилитам AIX, таким как ar
, as
и ld
, какие типы объектов обрабатывать по умолчанию.
По умолчанию система может чрезмерно выделять память в пространстве подкачки. Хотя нам не приходилось с этим сталкиваться, AIX уничтожает процессы при попытке обращения к чрезмерно выделенной памяти, когда её фактически не хватает. Наиболее близкое, что мы наблюдали, была ошибка порождения процесса из-за того, что система решала, что для него не хватает памяти. Как и многие другие компоненты AIX, механизмы распределения пространства подкачки и уничтожения процессов при нехватке памяти можно настроить на уровне системы или процесса, если возникают подобные проблемы.
17.7.2. Cygwin
PostgreSQL можно собрать с применением Cygwin, Linux-подобной среды для Windows, но сейчас этому методу предпочитается обычная сборка в Windows (см. Главу 18), и запускать сервер в среде Cygwin более не рекомендуется.
Выполняя сборку, следуйте процедуре установки в стиле Unix (т. е., ./configure; make
; и т. д.) с учётом следующих особенностей Cygwin:
Настройте путь поиска так, чтобы каталог bin в Cygwin стоял перед каталогами утилит Windows. Это поможет избавиться от проблем при компиляции.
Команда
adduser
не поддерживается; воспользуйтесь соответствующим средством управления пользователями для Windows NT, 2000 или XP. Либо просто пропустите этот шаг.Команда
su
не поддерживается; для эмуляции su в Windows NT, 2000 или XP воспользуйтесь ssh. Либо пропустите этот шаг.OpenSSL не поддерживается.
Запустите
cygserver
для поддержки разделяемой памяти. Для этого введите команду/usr/sbin/cygserver &
. Эта программа должна работать всегда при запуске сервера PostgreSQL или инициализации кластера баз данных (initdb
). Возможно, вам придётся настроить конфигурациюcygserver
(например, увеличитьSEMMNS
), чтобы PostgreSQL мог получить требуемые системные ресурсы.Сборка может завершиться ошибкой в некоторых системах, где используется локаль, отличная от C. Чтобы исправить это, выберите локаль C, выполнив
export LANG=C.utf8
до сборки, а затем восстановите предыдущее значение после установки PostgreSQL.Параллельные регрессионные тесты (
make check
) могут выдавать ложные ошибки тестирования при переполнении очередиlisten()
, из-за чего подключения могут не устанавливаться или зависать. Вы можете ограничить число подключений, определив переменную makeMAX_CONNECTIONS
так:make MAX_CONNECTIONS=5 check
(В некоторых системах поддерживается до 10 одновременных подключений).
Сервер PostgreSQL и cygserver
можно запустить в виде служб Windows NT. Как это сделать, рассказывается в описании README
, включённом в двоичный пакет PostgreSQL для Cygwin. Оно устанавливается в каталог /usr/share/doc/Cygwin
.
17.7.3. macOS
Чтобы собрать PostgreSQL из исходного кода в macOS, необходимо установить предоставляемые Apple инструменты командной строки для разработки, что можно сделать, выполнив:
xcode-select --install
(заметьте, что при этом в графическом интерфейсе появится окно подтверждения). Также вы можете установить Xcode, хотя это не требуется.
В последних версиях macOS необходимо включать путь «sysroot» во флаги include, позволяющие найти некоторые системные заголовочные файлы. Как результат, вывод скрипта configure может меняться в зависимости от того, какая версия SDK использовалась в процессе configure. Это не должно создавать никаких проблем в простых сценариях, но если вы попытаетесь, например, собрать расширение не на той машине, где был собран серверный код, то может потребоваться явно указать другой путь sysroot. В этом случае установите PG_SYSROOT
, например, так:
make PG_SYSROOT=/требуемый/путь
all
Чтобы узнать правильный путь на вашей машине, выполните:
xcrun --show-sdk-path
Заметьте, что собирать расширения с версией sysroot, отличной от той, с которой собиралось ядро сервера, не рекомендуется; в худшем случае это приведёт к труднодиагностируемым несогласованностям ABI.
Также при конфигурировании вы можете задать sysroot, отличный от подразумеваемого по умолчанию, передав PG_SYSROOT
скрипту configure:
./configure ... PG_SYSROOT=/требуемый/путь
Это может быть полезно прежде всего при кросс-компиляции для какой-либо другой версии macOS. При этом не гарантируется, что полученные исполняемые файлы будут запускаться в текущей системе.
Чтобы полностью подавить параметры -isysroot
, выполните:
./configure ... PG_SYSROOT=none
(указать можно любой несуществующий путь). Это может быть полезно, если вы хотите воспользоваться сторонним компилятором, не Apple, но учтите, что такая сборка не тестируется и не поддерживается разработчиками PostgreSQL.
Функциональность «Защита целостности системы» (System Integrity Protection, SIP) в macOS нарушает работу make check
, так как она не позволяет передавать нужное значение DYLD_LIBRARY_PATH
тестируемым исполняемым файлам. Обойти эту проблему можно, выполнив make install
перед make check
. Однако большинство разработчиков PostgreSQL просто отключают SIP.
17.7.4. MinGW/Собственная сборка Windows
PostgreSQL для Windows можно собрать с использованием MinGW, Unix-подобной среды сборки для операционных систем Microsoft, либо используя набор средств разработки Microsoft Visual C++. При использовании MinGW применяется обычная система сборки, описанная в этой главе; сборка Visual C++ выполняется по-другому, как описано в Главе 18.
PostgreSQL, портированный в Windows, будет работать в 32- или 64-битной версии Windows 2000 или новее. В предыдущих операционных системах нет достаточной инфраструктуры (но там можно использовать Cygwin). MinGW, Unix-подобные средства сборки, и MSYS, набор утилит Unix, требуемых для исполнения скриптов типа configure
, можно загрузить с сайта http://www.mingw.org/. Эти дополнительные программы нужны только для сборки, для запуска полученных исполняемых файлов они не требуются.
Чтобы собрать 64-битную версию с использованием MinGW, установите набор 64-битных утилит с https://mingw-w64.org/, добавьте путь к его каталогу bin в PATH
и запустите configure
с параметром --host=x86_64-w64-mingw32
.
Когда вы всё установите, запускать psql предлагается из CMD.EXE
, так как в консоли MSYS есть проблемы с буферизацией.
17.7.4.1. Сбор аварийных дампов в Windows
В случае аварии PostgreSQL в Windows он может сгенерировать минидамп памяти, который помогает выяснить причину аварии, подобно дампам памяти в Unix. Проанализировать эти дампы можно, используя Windows Debugger Tools (Средства отладки Windows) или Visual Studio. Чтобы в Windows получить дамп в случае аварии, создайте подкаталог crashdumps
в каталоге данных кластера. Дампы будут записываться в этот каталог с уникальным именем, составленным из идентификатора процесса, давшего сбой, и времени сбоя.
17.7.5. Solaris
PostgreSQL хорошо поддерживается в Solaris. Чем новее операционная система, тем меньше затруднений будет.
17.7.5.1. Требуемые инструменты
Вы можете выполнить сборку с GCC или с набором компиляторов Sun. Для лучшей оптимизации кода на архитектуре SPARC настоятельно рекомендуется использовать компилятор Sun. Если вы решили применить компилятор Sun, не выберите по ошибке /usr/ucb/cc
; правильный путь — /opt/SUNWspro/bin/cc
.
Sun Studio вы можете загрузить с сайта https://www.oracle.com/technetwork/server-storage/solarisstudio/downloads/. Средства GNU по большей части интегрированы в Solaris 10, либо представлены на сопутствующем CD. Если вам нужны пакеты для старых версий Solaris, вы можете найти их на сайте http://www.sunfreeware.com. Если вы предпочитаете исходный код, обратитесь к https://www.gnu.org/prep/ftp.
17.7.5.2. Процедура configure сообщает о сбое тестовой программы
Если configure
сообщает о сбое тестовой программы, это может быть вызвано тем, что при связывании во время выполнения не удаётся найти некоторую библиотеку, вероятно, libz, libreadline или какую-то другую нестандартную, например, libssl. Чтобы указать правильное размещение библиотеки, задайте переменную окружения LDFLAGS
в командной строке configure
, например так:
configure ... LDFLAGS="-R /usr/sfw/lib:/opt/sfw/lib:/usr/local/lib"
За дополнительными сведениями обратитесь к странице man ld.
17.7.5.3. Компиляция для максимальной производительности
Для архитектуры SPARC настоятельно рекомендуется проводить компиляцию с использованием Sun Studio. Добавив флаг -xO5
, вы можете получить исполняемый код, который будет работать значительно быстрее. Но не добавляйте никакие флаги, влияющие на вычисления с плавающей точкой или обработку errno
(например, -fast
).
Если у вас нет причины использовать 64-битные программы в архитектуре SPARC, собирайте 32-битную версию, так как 64-битные операции, а значит и 64-битные программы, выполняются медленнее 32-битных. С другой стороны, 32-битный код для процессоров семейства AMD64 не является «родным», поэтому на таких процессорах значительно медленнее работает 32-битный код.
17.7.5.4. Применение DTrace для трассировки PostgreSQL
Да, вы можете использовать DTrace. За дополнительными сведениями обратитесь к Разделу 28.5.
Если компоновка исполняемого файла postgres
прерывается с таким сообщением об ошибке:
Undefined first referenced symbol in file AbortTransaction utils/probes.o CommitTransaction utils/probes.o ld: fatal: Symbol referencing errors. No output written to postgres collect2: ld returned 1 exit status make: *** [postgres] Error 1
Это означает, что ваша инсталляция DTrace слишком стара и неспособна работать с пробами в статических функциях. Для использования DTrace нужна версия Solaris 10u4 или новее.