18.1. Сборка с помощью Visual C++ или Microsoft Windows SDK
PostgreSQL может быть собран с помощью компилятора Visual C++ от Microsoft. Этот компилятор есть в пакетах Visual Studio, Visual Studio Express и в некоторых версиях Microsoft Windows SDK. Если у вас ещё не установлена среда Visual Studio, проще всего будет использовать компиляторы из Visual Studio 2022 или из Windows SDK 10, которые Microsoft распространяет бесплатно.
С применением инструментария Microsoft Compiler возможна и 32-, и 64-битная сборка. 32-битную сборку PostgreSQL можно произвести с использованием Visual Studio 2013 — Visual Studio 2022, а также отдельных выпусков Windows SDK версии с 8.1a по 10. Для 64-битных сборок также можно использовать Microsoft Windows SDK версии с 8.1a по 10 или Visual Studio 2013 и новее. При сборке с Visual Studio 2013 — Visual Studio 2022 поддерживаются системы, начиная с Windows 7 и Windows Server 2008 R2 SP1.
Инструменты для компиляции с помощью Visual C++ или Platform SDK находятся в каталоге src\tools\msvc
. При сборке убедитесь, что в системном пути PATH не подключаются инструменты из набора MinGW или Cygwin. Также убедитесь, что в пути PATH указаны каталоги всех необходимых инструментов Visual C++. Если вы используете Visual Studio, запустите Visual Studio Command Prompt. Если вы хотите собрать 64-битную версию, вы должны выбрать 64-битную версию данной оболочки, и наоборот. Начиная с Visual Studio 2017, это можно сделать в командной строке, воспользовавшись скриптом VsDevCmd.bat
. О его параметрах и их значениях по умолчанию можно узнать, запустив его с ключом -help
. Вы можете выбрать целевую архитектуру процессора, тип сборки и целевую ОС в приглашении Visual Studio Command Prompt с помощью скрипта vcvarsall.bat
. Например, выполнив vcvarsall.bat x64 10.0.10240.0
, вы подготовитесь к сборке выпускаемой 64-битной версии для Windows 10. О других параметрах vcvarsall.bat
можно узнать, запустив его с ключом -help
. Все эти скрипты должны запускаться из каталога src\tools\msvc
.
До начала сборки можно создать файл config.pl
и изменить в нём желаемые параметры конфигурации или пути к сторонним библиотекам, которые будут использоваться. Для получения конфигурации сначала считывается и разбирается файл config_default.pl
, а затем применяются все изменения из config.pl
. Например, чтобы указать, куда установлен Python, следует добавить в config.pl
:
$config->{python} = 'c:\python310';
Вам нужно задать только те параметры, которые отличаются от заданных в config_default.pl
.
Если вам необходимо установить какие-либо другие переменные окружения, создайте файл с именем buildenv.pl
и поместите в него требуемые команды. Например, чтобы добавить путь к bison, которого нет в PATH, создайте файл следующего содержания:
$ENV{PATH}=$ENV{PATH} . ';c:\some\where\bison\bin';
Передать дополнительные аргументы командной строки команде сборки Visual Studio (msbuild или vcbuild) можно так:
$ENV{MSBFLAGS}="/m";
18.1.1. Требования
Для сборки PostgreSQL требуется следующее дополнительное ПО. Укажите каталоги, в которых находятся соответствующие библиотеки, в файле конфигурации config.pl
.
- Microsoft Windows SDK
Если с вашим инструментарием для разработки не поставляется поддерживаемая версия Microsoft Windows SDK, рекомендуется установить последнюю версию SDK (в настоящее время 10), которую можно загрузить с https://www.microsoft.com/download.
Устанавливая SDK, вы всегда должны выбирать для установки пункт Windows Headers and Libraries (Заголовочные файлы и библиотеки Windows). Если вы установили Windows SDK, включая Visual C++ Compilers, Visual Studio для сборки вам не нужна. Обратите внимание, что с версии 8.0a в SDK для Windows не включается полное окружение для сборки в командной строке.
- Strawberry Perl
Strawberry Perl требуется для запуска скриптов, управляющих сборкой. Perl из MinGW или Cygwin работать не будет. ActiveState Perl также должен находиться по пути в PATH. Готовый двоичный пакет можно загрузить с https://www.strawberryperl.com.
Следующее дополнительное ПО не требуется для базовой сборки, но требуется для сборки полного пакета. Укажите каталоги, в которых находятся соответствующие библиотеки, в файле конфигурации config.pl
.
- Magicsplat Tcl
Требуется для сборки PL/Tcl. Двоичные пакеты можно загрузить с https://www.magicsplat.com/tcl-installer/index.html.
- Bison и Flex
Для компиляции из Git требуются Bison и Flex, хотя они не нужны для компиляции из дистрибутивного пакета исходного кода. Bison должен быть версии 1.875 или 2.2, либо новее, а Flex — версии 2.5.31 или новее.
И Bison, и Flex входят в комплект утилит msys, который можно загрузить с http://www.mingw.org/wiki/MSYS в качестве компонента набора MinGW.
Вам потребуется добавить каталог, содержащий
flex.exe
иbison.exe
, в путь, задаваемый переменной PATH, вbuildenv.pl
, если она его ещё не включает. В случае с MinGW, это будет подкаталог\msys\1.0\bin
в каталоге вашей инсталляции MinGW.Примечание
Bison, поставляемый в составе GnuWin32, может работать некорректно, когда он установлен в каталог с именем, содержащим пробелы, например,
C:\Program Files\GnuWin32
(целевой каталог по умолчанию в англоязычной системе). В таком случае, возможно, стоит установить его вC:\GnuWin32
или задать в переменной окружения PATH короткий путь NTFS к GnuWin32 (например,C:\PROGRA~1\GnuWin32
).- Diff
Diff требуется для запуска регрессионных тестов, его можно загрузить с http://gnuwin32.sourceforge.net.
- Gettext
Gettext требуется для сборки с поддержкой NLS, его можно загрузить с http://gnuwin32.sourceforge.net. Обратите внимание, что для сборки потребуются и исполняемые файлы, и зависимости, и файлы для разработки.
- MIT Kerberos
Требуется для поддержки проверки подлинности GSSAPI. MIT Kerberos можно загрузить с https://web.mit.edu/Kerberos/dist/index.html.
- libxml2 и libxslt
Требуется для поддержки XML. Двоичный пакет можно загрузить с https://zlatkovic.com/pub/libxml, а исходный код с http://xmlsoft.org. Учтите, что для libxml2 требуется iconv, который можно загрузить там же.
- LZ4
Требуется для поддержки метода сжатия LZ4. Двоичные файлы и исходный код можно загрузить с https://github.com/lz4/lz4/releases.
- Zstandard
Требуется для поддержки метода сжатия Zstandard. Двоичные файлы и исходный код можно загрузить с https://github.com/facebook/zstd/releases.
- OpenSSL
Требуется для поддержки SSL. Двоичные пакеты можно загрузить с https://slproweb.com/products/Win32OpenSSL.html, а исходный код с https://www.openssl.org.
- ossp-uuid
Требуется для поддержки UUID-OSSP (только для contrib). Исходный код можно загрузить с http://www.ossp.org/pkg/lib/uuid/.
- Python
Требуется для сборки PL/Python. Двоичные пакеты можно загрузить с https://www.python.org.
- zlib
Требуется для поддержки сжатия в pg_dump и pg_restore. Двоичные пакеты можно загрузить с https://www.zlib.net.
18.1.2. Специальные замечания для 64-битной Windows
PostgreSQL для архитектуры x64 можно собрать только в 64-битной Windows, процессоры Itanium не поддерживаются.
Совместная сборка 32- и 64-битных версий в одном дереве не поддерживается. Система сборки автоматически определит, в каком окружении (32- или 64-битном) она запущена, и соберёт соответствующий вариант PostgreSQL. Поэтому сборку важно запускать в командной оболочке, предоставляющей нужное окружение.
Для использования на стороне сервера сторонних библиотек, таких как Python или OpenSSL, эти библиотеки также должны быть 64-битными. 64-битный сервер не поддерживает загрузку 32-битных библиотек. Некоторые библиотеки сторонних разработчиков, предназначенные для PostgreSQL, могут быть доступны только в 32-битных версиях и в таком случае их нельзя будет использовать с 64-битной версией PostgreSQL.
18.1.3. Сборка
Чтобы собрать весь PostgreSQL в конфигурации выпуска (по умолчанию), запустите команду:
build
Чтобы собрать весь PostgreSQL в конфигурации отладки, запустите команду:
build DEBUG
Для сборки отдельного проекта, например psql, выполните, соответственно:
build psql
build DEBUG psql
Чтобы сменить конфигурацию по умолчанию на отладочную, поместите в файл buildenv.pl
следующую строку:
$ENV{CONFIG}="Debug";
Также возможна сборка из графической среды Visual Studio. В этом случае вам нужно запустить в командной строке:
perl mkvcbuild.pl
и затем открыть в Visual Studio полученный pgsql.sln
в корневом каталоге дерева исходных кодов.
18.1.4. Очистка и установка
В большинстве случаев за изменением файлов будет следить автоматическая система отслеживания зависимостей в Visual Studio. Но если изменений было слишком много, может понадобиться очистка установки. Чтобы её выполнить, просто запустите команду clean.bat
, которая автоматически очистит все сгенерированные файлы. Вы также можете запустить эту команду с параметром dist
, в этом случае она отработает подобно make distclean
и удалит также выходные файлы flex/bison.
По умолчанию все файлы сохраняются в подкаталогах debug
или release
. Чтобы установить эти файлы стандартным образом, а также сгенерировать файлы, требуемые для инициализации и использования базы данных, запустите команду:
install c:\destination\directory
Если вы хотите установить только клиентские приложения и интерфейсные библиотеки, выполните команду:
install c:\destination\directory client
18.1.5. Запуск регрессионных тестов
Чтобы запустить регрессионные тесты, важно сначала собрать все необходимые для них компоненты. Также убедитесь, что в системном пути могут быть найдены все DLL, требуемые для загрузки всех подсистем СУБД (например, DLL Perl и Python для процедурных языков). Если их каталоги в пути поиска отсутствуют, задайте их в файле buildenv.pl
. Чтобы запустить тесты, выполните одну из следующих команд в каталоге src\tools\msvc
:
vcregress check
vcregress installcheck
vcregress plcheck
vcregress contribcheck
vcregress modulescheck
vcregress ecpgcheck
vcregress isolationcheck
vcregress bincheck
vcregress recoverycheck
vcregress taptest
Чтобы выбрать другой планировщик выполнения тестов (по умолчанию выбран параллельный), укажите его в командной строке, например:
vcregress check serial
Команду vcregress taptest
можно использовать для запуска TAP-тестов целевого каталога, например:
vcregress taptest src\bin\initdb\
За дополнительными сведениями о регрессионных тестах обратитесь к Главе 33.
Для запуска регрессионных тестов клиентских программ с применением команды vcregress bincheck
, тестов восстановления с применением vcregress recoverycheck
или TAP-тестов с применением vcregress taptest
должен быть установлен дополнительный модуль Perl:
- IPC::Run
На момент написания документации модуль
IPC::Run
не включается ни в инсталляцию Perl ActiveState, ни в библиотеку ActiveState PPM (Perl Package Manager, Менеджер пакетов Perl). Чтобы установить его, загрузите архив исходного кодаIPC-Run-<version>.tar.gz
из CPAN, по адресу https://metacpan.org/release/IPC-Run, и распакуйте его. Откройте файлbuildenv.pl
и добавьте в него переменную PERL5LIB, указывающую на подкаталогlib
из извлечённого архива. Например:$ENV{PERL5LIB}=$ENV{PERL5LIB} . ';c:\IPC-Run-0.94\lib';
Тесты TAP, запускаемые скриптом vcregress
, поддерживают переменные окружения PROVE_FLAGS
и PROVE_TESTS
, в которой автоматически разворачиваются шаблоны имён. Данные переменные можно установить в терминале Windows перед запуском vcregress
:
set PROVE_FLAGS=--timer --jobs 2 set PROVE_TESTS=t/020*.pl t/010*.pl
Эти параметры также можно задать в файле buildenv.pl
:
$ENV{PROVE_FLAGS}='--timer --jobs 2' $ENV{PROVE_TESTS}='t/020*.pl t/010*.pl'
Некоторые TAP-тесты зависят от набора внешних команд, при наличии которых могут быть запущены связанные с этими командами тесты. Переопределить эти команды или сбросить их можно в следующих переменных в buildenv.pl
:
GZIP_PROGRAM
Команда или путь для запуска программы gzip. По умолчанию —
gzip
, то есть для поиска этой команды будет использоватьсяPATH
.LZ4
Команда или путь для запуска программы lz4. По умолчанию —
lz4
, то есть для поиска этой команды будет использоватьсяPATH
.TAR
Команда или путь для запуска программы tar. По умолчанию —
tar
, то есть для поиска этой команды будет использоватьсяPATH
.ZSTD
Команда или путь для запуска программы zstd. По умолчанию —
zstd
, то есть для поиска этой команды будет использоватьсяPATH
.