Установка PostgreSQL
В этой главе описана процедура подготовки, установки и настройки PostgreSQL. По умолчанию многие возможности PostgreSQL не задействуются. Например, поддержку языка TCL приходится специально активизировать на стадии компиляции. Существует множество других возможностей, отключенных по умолчанию, поэтому мы рассмотрим различные флаги и ключи для их активизации во время компиляции PostgreSQL. Обязательно прочитайте описание перед тем, как начинать установку.
В этой главе рассматривается процедура установки PostgreSQL на платформах Linux/Unix. Хотя приведенное описание относится к Linux, инструкции подходят и для большинства современных платформ Unix.
ПРИМЕЧАНИЕ
PostgreSQL может работать на платформе Win32, однако установка пакета в системе Windows в книге не рассматривается. Независимая работа PostgreSQL для Win32 невозможна, пакет работает только в среде Cygwin. Несмотря на бесспорные достоинства среды Cygwin, практическое использование PostgreSQL в Cygwin не рекомендуется.
Подготовка к установке
Установка PostgreSQL не сложна. Тем не менее успешная компиляция PostgreSQL возможна лишь при соблюдении ряда требований к программной среде. Все требования (кроме наличия исходных текстов PostgreSQL) относятся к инструментарию GNU. Если вы работаете в системе Linux, вполне возможно, что этот инструментарий уже установлен. В системах, производных от BSD (таких, как FreeBSD или MacOS X), необходимые средства загружаются из Интернета.
Если окажется, что какие-либо из перечисленных компонентов отсутствуют в системе, сначала поищите пакеты на web-сайте поставщика системы. Кроме того, инструментарий GNU можно загрузить с сайта http://www.gnu.org. Объем свободного места в файловой системе, используемой для установки, должен быть достаточным для распаковки и компиляции исходных текстов (требования изложены в подразделе «Дисковое пространство» этого раздела).
Обязательные пакеты
Скорее всего, ваша операционная система уже содержит все (или почти все) обязательные программные пакеты. Ниже приведен полный список.
GNU make
В GNU-системах (таких, как Linux) используется имя make, а в других системах утилита обычно известна под именем gmake. Для удобства в книге будет использоваться имя gmake.
При компиляции PostgreSQL рекомендуется использовать gmake версии 3.76.1 и выше. Номер версии gmake проверяется командой, приведенной в листинге 2.1.
Листинг 2.1. Проверка версии GNU make
$ gmake --version
GNU Make version 3.79.1, by Richard Stallman and Roland McGrath.
Built for i386-redhat-linux-gnu
Copyright (C) 1988. 89. 90. 91. 92. 93. 94. 95. 96. 97. 98. 99, 2000
Free Software Foundation. Inc.
This is free software; see the source for copying conditions. There is NO warranty: not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
Report bugs to <bug-make.gnu.org>
Компилятор С стандарта ISO/ANSI
Существует множество компиляторов С, соответствующих стандарту ISO/ANSI. Для компиляции PostgreSQL рекомендуется использовать компилятор GCC (GNU С Compiler), хотя PostgreSQL также может успешно компилироваться продуктами других разработчиков. На момент написания книги наибольшее распространение получили компиляторы версий 2.95 и 2.96 (Red Hat Linux 7.x и Mandrake Linux 8.x). Если компилятор GCC не установлен в вашей системе, загрузите его с web-сайта http://gcc.gnu.org.
Номер версии GCC проверяется командой, приведенной в листинге 2.2.
Листинг 2.2. Проверка версии GCC
$ gcc --version
2.95.3
Утилиты GNU zip и tar
Утилита GNU zip (также называемая gzip) предназначена для сжатия и восстановления файлов. Сжатым файлам, созданным утилитой gzip, присваивается расширение .gz. Проверка наличия и версии программы gzip производится командой gzip --version.
В дополнение к gzip вам также понадобится утилита tar, предназначенная для слияния файлов и каталогов в один архив и последующей распаковки архивов в файловой системе. Архивированный файл, созданный утилитой tar, обычно снабжается расширением .tar. Файлы, сжатые утилитой gzip и архивированные утилитой tar, обычно имеют составное расширение .tar.gz. Именно так выглядят архивные
файлы из комплекта поставки PostgreSQL. Номера версий gzip и tar проверяются командой, приведенной в листинге 2.3.
Листинг 2.3. Проверка версии gzip и tar
$ gzip --version
gzip 1.3
(1999-12-21)
Copyright 1999 Free Software Foundation
Copyright 1992-1993 Jean-Loup Gailly
This program cones with ABSOLUTELY NO WARRANTY.
You may redistribute copies of this program
under the terms of the GNU General Public License.
For more information about these matters, see the file named COPYING.
Compilation options:
DIRENT UTIME STOC_HEADERS HAVE_UNISTD_H HAVE_MEMORY_H HAVE_STRING_H
Writter by Jean-Loup Gailly.
$ tar --version
tan (GNU tar) 1.13.17
Copytight 2000 Free Software Foundation. Inc.
This program cones with NO WARRANT, to the extent permitted by law.
You may redistribute it under the terms of the GNU General Public License:
see the file named COPYING for details
Written by John Gilmore and jay Fenlason.
Дополнительные пакеты
Ниже перечислены некоторые дополнительные пакеты, которые также рекомендуется установить в системе.
Библиотека GNU Readline. Библиотека GNU Headline значительно расширяет возможности psql, стандартного клиента PostgreSQL режима командной строки. В режиме командной строки psql появляется поддержка всех стандартных ' возможностей библиотеки GNU Readline, в том числе удобные средства чтения и редактирования ранее введенных команд при помощи клавиш управления курсором, а также поиск в журнале команд. Если библиотека Readline уже установлена в системе, ее поддержка включается автоматически в процессе конфигурирования.ПРИМЕЧАНИЕ
В NetBSD этот пакет не нужен, поскольку в NetBSD имеется библиотека libedit, совместимая с Readline.
OpenSSL. OpenSSL представляет собой реализацию протоколов SSL/TLS с открытыми исходными текстами. Пакет обычно работает в сочетании с такими утилитами, как OpenSSH и Apache-SSL. В PostgreSQL он используется для шифрования обмена данными между клиентским приложением psql и рабочими модулями PostgreSQL. Кроме того, OpenSSL может понадобиться в том случае, если вы собираетесь использовать Stunnel. За дополнительной информацией о OpenSSL обращайтесь по адресу http://www.openssl.org. Процесс установки и настройки Stunnel для использования с PostgreSQL описан в главе 8. Td/Tk. Комбинация языка программирования с графическим инструментарием. Хотя работа с Tel с PostgreSQL в книге не описывается, мы рассмотрим приложение PgAccess, написанное на Tel. Ели вы собираетесь использовать PgAccess, вам придется установить Tcl/Tk. За информацией о Tcl/Tk обращайтесь на сайт http://tcl.activestate.com. Ant/JDK. Пакет JDK (Java Development Kit) используется для программирования на Java и позволяет включить в PostgreSQL поддержку JDBC. Кроме того, для поддержки JDBC необходима Java-утилита Ant, отдаленный аналог gmake. JDK можно найти по адресу http://java.sun.com/j2se/index.html, a Ant — по адресу http://jakarta.apache.org/ant/index.html.Дисковое пространство
PostgreSQL не очень интенсивно использует дисковые ресурсы. На фоне таких продуктов, как Oracle, запросы PostgreSQL выглядят более чем умеренно. Тем не менее PostgreSQL является системой управления базами данных, и при продолжительном использовании PostgreSQL затраты дискового пространства растут.
На среднем компьютере с системой Linux понадобится примерно 50 Мбайт на распаковку исходных текстов и еще 60 Мбайт на их компиляцию. Выполнение регрессионных тестов потребует еще 30 Мбайт. В зависимости от выбранных параметров конфигурации после установки PostgreSQL расходует от 8 до 15 Мбайт дискового пространства.
ПРИМЕЧАНИЕ
Помните, что по мере использования PostgreSQL затраты дискового пространства растут! Заранее позаботьтесь о наличии свободного места для хранимых данных.
Нехватка дискового пространства при установке PostgreSQL сопряжена с потенциальным риском. Прежде чем устанавливать PostgreSQL, проверьте файловую систему и убедитесь в наличии свободного места в том разделе, в котором собираетесь устанавливать систему (например, /usr/local). В GNU-системах для этой цели можно воспользоваться командой df. Пример приведен в листинге 2.4; свободное место на диске измеряется в блоках объемом 1 Кбайт.
Листинг 2.4. Проверка свободного места на диске
$ df -k
Filesystem Ik-blocks Used Available UseX Mounted on
/dev/hdal 2355984 932660 1303644 42% I
/dev/hdbl 4142800 2133160 1799192 54* /home
/dev/hda6 1541680 272540 1190828 19* /usr/local
этапов установки PostgreSQL
Дистрибутив PostgreSQL имеется на компакт-диске, прилагаемом к книге, но вы также можете посетить web-сайт PostgreSQL и проверить, не появилась ли более новая версия. Исходные тексты PostgreSQL размещены на многих ftp-сайтах. Полный список зеркальных ftp-сайтов имеется на сайте http://www.postgresql.org.
После подключения к одному из зеркальных ftp-сайтов PostgreSQL вы увидите список стабильных версий в виде каталогов, имена которых строятся по схеме vверсия (например, v7.1.3). Также на сайте может присутствовать символическая ссылка на каталог самой «свежей» стабильной версии PostgreSQL с именем latest/. В каждом каталоге находится несколько файлов пакетов. Полный пакет установки PostgreSQL называется postgresq-[версия].tar.gz, это самый большой файл в каталоге. Ниже перечислены дополнительные пакеты (суб-пакеты), которые могут устанавливаться в произвольном сочетании (обязателен только пакет base).
postgresq\-base-[eepcux].tar.gz. Минимальный набор исходных текстов, необходимых для построения и запуска PostgreSQL. postgresql-docs-[oepcH#].tar.gz. Документация PostgreSQL в формате HTML. Учтите, что многие man-страницы PostgreSQL автоматически устанавливаются с пакетом base. postgresql-opt-[cepcM^].tar.gz. Дополнительные расширения PostgreSQL, в том числе интерфейсы для C++ (libpq++),JDBC, ODBC, Perl, Python и Tel. Пакет также содержит исходный код, обеспечивающий поддержку расширенной кодировки символов. postgresql-test-[eepcw#].tar.gz. Комплекс регрессионных тестов. Пакет необходим для проведения регрессионных тестов после компиляции PostgreSQL.Этап 1. Создание пользователя postgres
Создайте в Unix учетную запись пользователя, которому будет принадлежать право владения и администрирования файлами баз данных PostgreSQL. Обычно этому пользователю назначается имя «postgres», но вы можете выбрать любое имя по своему усмотрению. В примерах, приведенных в книге, предполагается, что пользователь postgres обладает правами суперпользователя для PostgreSQL.
Для создания суперпользователя PostgreSQL необходимо обладать правами root. В системе Linux пользователь postgres создается командой, приведенной в листинге 2.5.
Листинг 2.5. Создание пользователя postgres
$ su - -с "useradd postgres"
ВНИМАНИЕ
Не пытайтесь использовать учетную запись root в качестве суперпользователя PostgreSQL, поскольку при этом открывается заметная брешь в системе безопасности.
Этап 2. Установка пакета исходных текстов PostgreSQL
После получения исходных текстов PostgreSQL скопируйте пакет во временный каталог, из которого будет производиться компиляция и настройка PostgreSQL. Распакуйте файл архива с расширением .tar.gz и переходите к установке.
Учтите, что этот каталог не будет использоваться для хранения файлов базы данных после установки, это лишь временное хранилище для настройки и компиляции исходного пакета. Если пакет PostgreSQL был загружен из Интернета, скорее всего, его не окажется в каталоге компиляции (если не сохранить его там специально). Обычно для построения программ в системах Linux/Unix используется каталог /usr/local/src. Вероятно, для обращения к этому каталогу вам понадобятся права root. По этой причине в остальных примерах этой главы, если не оговорено обратное, подразумеваются права root.
ВНИМАНИЕ
Если вы работаете в коммерческой поставке Linux, мы настоятельно рекомендуем проверить, не был ли пакет PostgreSQL установлен по умолчанию. В RPM-системах (например, SuSe, Mandrake и Red Hat) для этого можно воспользоваться командой rpm -qa | grep -i postgres. Если пакет PostgreSQL установлен, не исключено, что он уже устарел. В этом случае следует загрузить и установить обновленную версию PostgreSQL. В процессе установки PostgreSQL под управлением RPM некоторые сценарии и программы (такие, как postmaster и psql) иногда копируются в общедоступные каталоги. Это может стать причиной конфликтов с версиями, откомпилированными из исходных текстов, поэтому перед установкой новой версии обязательно удалите старый пакет командой rpm -e <имя_пакета>.
Чтобы распаковать исходные тексты PostgreSQL в системе Linux, сначала переместите или скопируйте с компакт-диска сжатый файл в каталог /usr/local/src (многие пользователи перемещают исходные тексты в этот каталог, чтобы отделить их от своего домашнего каталога и/или других каталогов, в которых могут храниться загруженные файлы). Когда файл окажется в нужном каталоге файловой системы, распакуйте его утилитой tar. Команды для выполнения этих операций приведены в листинге 2.6.
Листинг 2.6. Распаковка исходных текстов PostgreSQL
[root@host root]# cp postgresql-7.1.3.tar.gz /usr/local/src
[root@host root]# cd /usr/local/src
[root@host src]# tar -xzvf postgresql-7.1.3.tar.gz
postgresql-7.1.3/
postgresql-7.1.3/ChangeLogs/
postgresql-7.1.3/ChangeLogs/ChangeLog-7.1-7.1.1
postgresql-7.1.3/ChangeLogs/ChangeLog-7.lRCl-to-7.1RC2
postgresql-7.1.3/ChangeLogs/ChangeLog-7.lRC2-to-7.1RC3
postgresql-7.1.3/ChangeLogs/ChangeLog-7.lRC3-to-7.Irc4
postgresql-7.1.3/ChangeLogs/ChangeLog-7.lbetal-to-7.Ibeta3
postgresql-7.1.3/ChangeLogs/ChangeLog-7.lbeta3-to-7.Ibeta4
postgresql -7.1.3/ChangeLogs/ChangeLog-7.lbeta4-to-7.IbetaS
postgresql-7.1.3/ChangeLogs/ChangeLog-7.lbeta5-to-7.Ibeta6
postgresql-7.1.3/ChangeLogs/ChangeLog-7.lbeta6-7.1RC1
postgresql-7.1.3/ChangeLogs/ChangeLog-7.Irc4-7.1
postgresql -7.1.3/ChangeLogs/ChangeLog-7.1.1-7.1.2
postgresql-7.1.3/ChangeLogs/ChangeLog-7.1.2-7.1.3
postgresql-7.1.3/Copyright
[...]
[root@host root]# chown -R postgres.postgres postgresql-7.1.3
Обратите внимание на последнюю команду в листинге 2.6:
chown -R postgres.postgres postgresql-7.1.3
Команда назначает владельцем иерархии исходных текстов PostgreSQL пользователя postgres, поэтому компиляция PostgreSQL должна осуществляться пользователем postgres. Если после распаковки архива и смены владельца вы откомпилируете PostgreSQL как пользователь postgres, то этот пользователь автоматически станет владельцем всех откомпилированных файлов.
Ниже перечислены флаги утилиты tar, используемые при распаковке архива исходных текстов PostgreSQL.
х (eXtract). Утилита tar распаковывает файл с переданным именем (вместо того, чтобы создавать новый архив). v (Verbose). Утилита tar выводит расширенную информацию в процессе распаковки. z (Zipped). Исходный файл распаковывается утилитой gunzip. Флаг существует в GNU-версии; другие версии tar могут не поддерживать его. Если вы не используете инструментарий GNU, перед распаковкой пакета утилитой tar вам придется вручную восстановить сжатые файлы утилитой gunzip. f (File). Имя файла, распаковываемого утилитой tar, указывается после параметра f. В приведенном примере используется файл с именем postgres-7.1.3.tar.gz.После распаковки файлов войдите в систему под именем postgres и перейдите в созданный каталог (например, /usr/local/src/postgres-7.1.3). Остальные этапы установки будут выполняться в этом каталоге.
Этап 3. Настройка конфигурации
Перед компиляцией необходимо произвести настройку исходных текстов и задать конфигурацию в соответствии с вашим потребностями. Для этой цели используется сценарий configure.
Сценарий configure также осуществляет проверку связей, необходимых для компиляции PostgreSQL. В процессе проверки связей сценарий автоматически создает файлы, необходимые для работы gmake.
Стандартный сценарий установки запускается командой ./configure. Чтобы активизировать возможности, отключенные по умолчанию, включите соответствующий ключ в команду ./configure. Полный список всех ключей конфигурации выводится командой . /conf i gure - - hel p.
Скорее всего, используемая по умолчанию конфигурация будет отличаться от той, которая нужна вам. Для нормальной установки PostgreSQL рекомендуется задать по крайней мере следующие ключи:
- -with-CXX — построение библиотеки libpq++ позволяет создавать программы C++, работающие с PostgreSQL; - -enable-odbc — поддержка подключения к PostgreSQL из программ, имеющих совместимый драйвер ODBC (например, Microsoft Access); - -enable-multibyte — возможность использования многобайтовых кодировок (например, для японского языка); - -with-maxbackends=4MOo — в параметре указывается максимальное количество подключений (по умолчанию — 32). Ниже приведен полный список параметров конфигурации. - -ргеПх=и/?ефмкс. Каталог, в котором размещаются установленные файлы вместо используемого по умолчанию каталога /usr/local/pgsql. - -exec-prefix=npe^wKc. Каталог для размещения системных исполняемых файлов. --Ълг\й\г=каталог. Каталог для размещения пользовательских исполняемых файлов (например, psql). - -datadi г=каталог. Каталог для установки файлов данных, используемых программами PostgreSQL, а также для примеров файлов конфигурации. Каталог, заданный этим параметром, не используется в качестве альтернативного каталога для хранения данных; он всего лишь содержит служебные файлы PostgreSQL, доступные только для чтения. --зузсопЛдйтг^катеалог. Каталог для размещения системных конфигурационных файлов. По умолчанию файлы хранятся в подкаталоге etc базового каталога установки. - -11 bdi г=каталог. Каталог для размещения библиотечных файлов. В системе Linux этот каталог также должен указываться в файле ld.so.conf. - - i ncl udedi г=каталог. Каталог для размещения заголовочных файлов С и C++. По умолчанию заголовочные файлы хранятся в подкаталоге include базового каталога установки. - - docdi г=т«шялог. Каталог для размещения файлов документации. Man-страницы PostgreSQL хранятся в другом каталоге. - -mandi г=каталог. Каталог для размещения man-страниц. - -with-includes=K'fl7/za/;c^H. Список каталогов, просматриваемых при поиске дополнительных заголовочных файлов. Элементы списка разделяются двоеточиями (:). - -with-1 ibraries=каталоги. Список каталогов, просматриваемых при поиске дополнительных библиотечных файлов. Элементы списка разделяются двоеточиями (:). - -enable-locale. Поддержка локальных контекстов. Отрицательно сказывается на быстродействии и включается только в том случае, если вы работаете не в англоязычной среде. - -enable-multibyte. Поддержка многобайтовых кодировок. При указании этого ключа включается поддержка символов, не входящих в кодировку ASCII; особенно часто используется при работе с японским, китайским и корейским языками. --with-pgport=HO,wep. Номер порта, используемый PostgreSQL по умолчанию. Может быть изменен при запуске приложения postmaster. - -with-maxbackends=4WG70. Максимальное количество подключений (по умолчанию - 32). - -with-CXX. В процессе установки автоматически компилируется интерфейсная библиотека C++. Ключ указывается в том случае, если вы намерены разрабатывать приложения C++, работающие с PostgreSQL. --with-perl. В процессе установки автоматически компилируется интерфейсный модуль Perl. Этот модуль должен устанавливаться в каталог, обычно принадлежащий пользователю root, поэтому для завершения установки при выборе этого режима вам придется обладать правами root. Ключ обязателен лишь в том случае, если вы собираетесь использовать процедурный язык pi/Perl. - -with-python. В процессе установки автоматически компилируется интерфейсный модуль PostgreSQL Python. Как и в случае с ключом --with-perl, для завершения установки с этим ключом необходимо обладать правами root. Ключ обязателен лишь в том случае, если вы собираетесь использовать процедурный язык pi/Python. - -with-tcl. Включение поддержки Tel. При наличии этого ключа устанавливаются приложения и расширения PostgreSQL, требующие Tel, такие как pgaccess (популярный графический клиент баз данных) и процедурный язык pl/Tcl. - -without-tk. Поддержка Tel компилируется без поддержки графического инструментария Tk. Если ключ задается в сочетании с ключом - -with-tcl, то приложения PostgreSQL, для которых необходима поддержка Tk (например, pgtksh и pgaccess), не устанавливаются. - -with-tclconfig=KaOTiM02, - -with-tkconfig=K<OTzoro2. Каталог для размещения конфигурационного файла Tel или Tk (tclconfig.sh или tkConfig.sh в зависимости от ключа). Эти два файла устанавливаются при установке Tcl/Tk, а хранящиеся в них данные используются интерфейсными модулями Tcl/Tk в PostgreSQL. - -enable-odbc. Включение поддержки ODBC. - -with-odbcinst=Ka?fl<7.//o,>. Каталог, в котором драйвер ODBC ищет файл odbcinst.ini. По умолчанию файл находится в подкаталоге etc базового каталога установки. - -vnth-krb4=x:<27tta.ic^, - -with-krb5=Ka7na20<!. Поддержка системы аутентификации Kerberos. В настоящей книге система Kerberos не рассматривается. - -with-krb-srvnam=2iWJ. Имя службы Kerberos. По умолчанию используется имя postgres. - -with-openssl=x<2/n<Mo<>. Поддержка шифрованного обмена данными с базой по протоколу SSL. Пакет OpenSSL должен быть установлен в заданном каталоге и правильно настроен. Ключ обязателен в том случае, если вы собираетесь использовать stunnel. --with-Java. ПоддержкаJava/JDBC. Для правильной компиляции PostgreSQL с этим ключом необходимы пакеты Ant и JDK. - -enable-syslog. Ведение системного журнала при помощи демона syslog. - -enable-debug. Компиляция всех библиотек и приложений PostgreSQL производится с включением отладочных символических имен. Это приводит к снижению быстродействия и росту числа двоичных файлов, но символические имена упрощают диагностику ошибок, возникающих при работе с PostgreSQL. - -enable-cassert. Включение режима проверки условий (assertions). Режим снижает быстродействие PostgreSQL и используется только в процессе отладки самой системы PostgreSQLЕсли после компиляции PostgreSQL выяснится, что вы забыли включить нужный режим, вернитесь к этому этапу, измените конфигурацию и продолжите процесс построения и установки PostgreSQL. Если возврат происходит перед завершением установки, обязательно выполните команду gmake clean в каталоге верхнего уровня иерархии исходных текстов (обычно /usr/local/src/postgresql-[«epc«^]). В результате будут удалены все промежуточные объектные и частично откомпилированные файлы.
Этап 4. компиляция исходных текстов
После выполнения команды configure переходите к компиляции PostgreSQL командой gmake. Примерный результат приведен в листинге 2.7.
ПРИМЕЧАНИЕ
На компьютерах с системой Linux вместо gmake может использоваться команда make. Пользователи BSD используют команду gnumake.
Листинг 2.7. Компиляция исходных текстов при помощи утилиты GNU make
[postgresPhost postgresql-7.1.3]# gmake
gmake -C doc all
gmake[l]: Entering directory /usr/local/src/postgresql-7.1.3/doc'
gmake[l]: Nothing to be done for all'.
gmake[l]: Leaving directory /usr/local/src/postgresql-7.1.3/doc'
gmake -C src all
gmake[l]: Entering directory /usr/local/src/postgresql-7.1.3/src'
gmake -C backend all
gmake[2]: Entering directory /usr/local/src/postgresql-7.1.3/src/backend'
gmake -C utils fmgroids.h
gmake[3]: Entering directory /usr/local/src/postgresql-7.1.3/src/backend/utils'
[...]
В зависимости от быстродействия компьютера процесс может занять 10 минут, час и даже больше. После завершения компиляции появляется следующее сообщение:
All of PostgreSQL is successfully made. Ready to install.
Этап 5. Регрессионное тестирование
Регрессионное тестирование — не обязательный, но рекомендуемый этап. Он позволяет убедиться в том, что после компиляции исходных текстов PostgreSQL работает так, как ожидается. В процессе тестирования проверяются как стандартные операции SQL, так и расширенные возможности PostgreSQL. Регрессионные тесты помогают выявить возможные проблемы, возникающие при работе PostgreSQL
Регрессионное тестирование выполняется командой gmake check. Результат ее выполнения показан в листинге 2.8.
Листинг 2.8. Регрессионное тестирование
[postgres(?host postgresql-7.1.3]f gmake check
gmake -С doc all
gmake[l]: Entering directory /usr/local/src/postgresql-7.1.3/doc'
gmake[l]: Nothing to be done for all'.
gmake[l]: Leaving directory /usr/local/src/postgresql-7.1.3/doc'
[...]
Команда gmake check строит тестовый вариант PostgreSQL и выполняет серию тестов. После завершения каждого теста выводится результат: ok для удачных тестов и failed для неудачных. Примерный вид сообщения об ошибке приведен в листинге 2.9 (вероятно, в вашей системе количество тестов будет выше указанного).
Листинг 2.9. Выходные данные регрессионных тестов
============
1 of 76 tests failed.
============
The differences that caused some tests to fail can be viewed in the file ./regression.(Jiffs'. A copy of the test summary that you see above is saved in the file ./regression.out'.
Файлы, упоминаемые в листинге 2.9 (regression.diffs и regression.out), размещаются в подкаталоге src/test/regress каталога исходных текстов. Если исходные тексты PostgreSQL размещаются в каталоге /usr/local/src, то файлы результатов регрессионных тестов будут находиться в каталоге /usr/local/src/postgresql-[версия]/src/ test/regress.
Регрессионные тесты не всегда выявляют все возможные ошибки. Проблемы иногда возникают из-за несогласованности параметров локального контекста (например, часовых поясов) или специфики оборудования (скажем, результатов операций с плавающей точкой). При разработке приложений PostgreSQL обязательно проводите собственное тестирование.
ВНИМАНИЕ
Регрессионные тесты не могут выполняться с правами root. Команда gmake check должна запускаться пользователем postgres.
Этап 6. Установка откомпилированных программ и библиотек
После настройки и компиляции исходного кода PostgreSQL откомпилированные библиотеки, двоичные файлы и файлы данных необходимо перенести в другой, более подходящий каталог. В случае обновления существующей версии PostgreSQL обязательно создайте резервные копии баз данных. О том, как это делается, рассказано в главе 9.
Команды установки откомпилированных файлов приведены в листинге 2.10. Команда su временно предоставляет права root для выполнения двух необходимых команд. Для выполнения обеих команд, приведенных в листинге 2.10, необходимо знать пароль пользователя root.
ПРИМЕЧАНИЕ
Если на этапе 3 был задан нестандартный каталог установки, укажите его вместо каталога /usr/ local/pgsql.
Листинг 2.10. Команда gmake install
S su -с "gmake install" Password:
gmake -C doc install
gmaketl]: Entering directory /usr/local/src/postgresql-7.1.3/doc'
mkdir /usr/local/pgsql
mkdir /iusr/local/pgsql/man
mkdir /iusr/local/pgsql/doc
mkdir /iusr/local/pgsql/doc/html
$ su -c "chown -K postgres.postgres /usr/local/pgsql"
Password:
Команда su -с "gmake install" устанавливает откомпилированные файлы в каталог, заданный на этапе 3 с ключом --prefix. Если ключ не указывался, файлы устанавливаются в принятый по умолчанию каталог /usr/local/pgsq. Команда su -с "chown -К postgres.postgres /usr/1 oca! /pgsql" назначает владельцем установочного каталога PostgreSQL пользователя postgres, позволяя переключиться на права пользователя root на время выполнения команды.
Если вы хотите включить поддержку интерфейса с Perl или Python, но не обладаете правами root, необходимые интерфейсы можно включить вручную. Команды установки модулей Perl и Python приведены в листинге 2.1 1.
Листинг 2.11. Ручная установка модулей Perl и Python
$ su -с "gmake -С src/interf aces/perl 5 install"
Password:
Password:
gmake: Entering directory /usr/local/src/postgresql-7.1.3/src/interfaces/perl5'
perl Makefile. PL
Checking if you kit Is complete. . .
Looks good
Writing Makefile for PostgreSQL
gmake -f Makefile clean
[...]
$ su -c "gmake -C src/interfaces/python install"
Password:
gmake: Entering directory /usr/1ocal/src/postgresql-7.1.3/src/interfaces/python'
sed -e 's.@1ibpq_srcdir@, ../../. ./src/interfaces/libpq,g' \
-e 's,@libpq_builddir@. ../../. ./src/interfaces/libpq.g' \
-e 's£@EXTRA_LIBS(a£ -Iz -Icrypt -Iresolv -Insl -Idl -1m -Ibsd -Ireadline -Itermcap %g' \
-e ' s*@INCLUDES@*- I. ./../.. /src/includelg1 \
[...]
Также рекомендуется установить заголовочные файлы PostgreSQL. По умолчанию устанавливаются только заголовочные файлы, предназначенные для разработки клиентских приложений. Если вы собираетесь использовать расширенные возможности PostgreSQL (например, разрабатывать пользовательские функции или приложения на С, ориентированные на библиотеку libpq), вам понадобятся соответствующие заголовочные файлы. Команды установки этих файлов приведены в листинге 2.12.
Листинг 2.12. Установка всех заголовочных файлов
$ su -c "gmake install -all -headers"
Password:
gmake -C src install -all -headers
gmake[l]: Entering directory /usr/local/src/postgresql-7.1.3/src'
gmake -C include install-all-headers
[...]
Этап 7. Настройка переменных среды
Использовать переменные среды PostgreSQL не обязательно. Тем не менее эти переменные задействованы при выполнении различных операций PostgreSQL, включая запуск и завершение процессов postmaster. В переменных среды задаются пути к каталогу bin и каталогу man-документации. Для этого в файл /etc/profile
решение относится к командным интерпретаторам на базе sh, включая bash и ksh):
PATH=$PATH:/usrЛocal/pgsql/bin
MANPATH=$MANPATH:/usr/1ocal/pgsql/man
export PATH MANPATH
ПРИМЕЧАНИЕ
Чтобы переменные среды использовались командным интерпретатором, необходимо заново войти в систему после включения соответствующих строк в файл /etc/profile.
Возможно, вам также придется сообщить системе местонахождение общих библиотек PostgreSQL (в зависимости от того, как организована работа с общими библиотеками в вашей системе). В таких системах, как Linux, FreeBSD, NetBSD, OpenBSD, Irix, HP/UX и Solaris, это обычно не требуется.
При стандартной установке поиск общих библиотек производится в каталоге /usr/local/pgsql/lib (или другом каталоге, указанном после ключа --prefix во время конфигурации). Обычно для этого переменной среды LD_LIBRARY_PATH присваивается значение /usr/local/pgsql/lib. В листинге 2.13 показано, как это делается в интерпретаторе bash, а в листинге 2.14 приведен аналогичный пример для csh и tcsh.
Листинг 2.13. Создание переменной среды LD_LIBRARY_PATH в bash
$ LD_LIBRARY_PATH=/usr/local/pgsql/lib
$ export LD_LIBRARY_PATH
Листинг 2.14. Создание переменной среды LD_LIBRARY_PATH в csh и tcsh
$ setenv LDJ-IBRARY_PATH=/usr/local/pgsql/lib
Этап 8. Инициализация и запуск PostgreSQL
Если вы зарегистрированы как привилегированный пользователь root, то вместо выполнения команд su - с, знакомых по предыдущим этапам, вам придется войти в систему под именем postgres, созданным на первом этапе. После входа под именем postgres введите команду, приведенную в листинге 2.15.
Листинг 2.15. Инициализация базы данных
$ /usr/local/pgsql/bin/initdb -D /usr/1ocal/pgsql/data
Ключ -D определяет каталог, в котором будут храниться данные. То же самое можно сделать при помощи переменной среды PCDATA. Если значение переменной PCDATA задано, ключ -D не обязателен. Если вы предпочитаете хранить файлы данных в другом каталоге, убедитесь в том, что пользователь postgres обладает правом записи в этот каталог. Примерный результат инициализации initdb приведен в листинге 2.16.
Листинг 2.16. Выходные данные initdb
$ /usr/local/pgsql/bin/intidb -D /usr/local/pgsql/data
This database system will be initialized with username "postgres."
This user will own all the data files and must also own the server process.
Creating directory /usr/pgsql/data
Creating directory /usr/pgsqi/data/case
Creating directory /usr/pgsql/data/global
Creating directory /usr/pgsql/pg_xlog
Creating tempiatel database in /usr/local/pgsql/data/base/l
DEBUG: database system was shut down at 2001-08-24 16:36:35 PDT
DEBUG: Checkpoint record at (0. 8)
DEBUG: Redo record at (0. 8): Undo record at (0. 8): Shutdown TRUE
DEBUG: NextTransactionld: 514; NextOid: 16384
DEBUG: database system is in production state
Creating global relations in /usr/local/pgsql/data/global
DEBUG: database system was shut down at 2001-08-24 16:36:38 PDT
DEBUG: Checkpoint record at (Q. 108)
DEBUG: Redo record at (0. 108): Undo record at (0. 0); Shutdown TRUE
DEBUG: NextTransactionld: 514: NextOid: 17199
DEBUG: database system is in production state
Initializing pg_shadow
Enabling unlimited row width for system tables.
Creating system views.
Loading pg_description.
Setting lastsysoid.
Vacuuming database.
Copying tempiatel to tempiateO.
Success. You can now start the database server using:
/usr/local/pgsql/bin/postmaster -D /usr/local/pgsql/data
or
/usr/local/pgsql/bin/pg_ct1 -D /usr/local/pgsql/data -1 logfile start
ПРИМЕЧАНИЕ
Чтобы в PostgreSQL использовался другой каталог данных, укажите путь к этому каталогу с ключом -О. Каталог должен быть предварительно инициализирован командой initdb.
В конце выходных данных команды initdb приводится информация о двух вариантах запуска сервера PostgreSQL. В первом варианте процесс postmaster запускается в активном режиме. После ввода команды, приведенной в листинге 2.17, приглашение командной строки становится недоступным до тех пор, пока процесс postmaster не будет остановлен клавишами Ctrl+C.
Листинг 2.17. Запуск postmaster в активном режиме
$ /usr/local/pgsql/bin/postmaster -D /usr/local/pgsql/data
DEBUG: database system was shut down at 2001-10-12 23:11:00 PDT
DEBUG: Checkpoint record at (0. 1522064)
DEBUG: Redo record at (0. 1522064): Undo record at (0. 8): Shutdown TRUE
DEBUG: NextTransactionld: 615: NextOid: 18720
DEBUG: database system is in production state
Запускать PostgreSQL в активном режиме обычно не требуется. Авторы рекомендуют использовать вторую команду, которая запускает postmaster в фоновом режиме. Как показано в листинге 2.18, процесс запускается командой pg_ct1.
Листинг 2.18. Запуск postmaster в фоновом режиме
$ /usr/1ocal/pgsqVbin/pg_ctl -D /usr/local/pgsql/data -1 /tmp/pgsql.log start
postmaster successfully started
Главное различие между этими двумя командами заключается в том, что во втором варианте postmaster запускается в фоновом режиме, а вся отладочная информация направляется в файл /tmp/pgsql.log. При нормальной работе обычно рекомендуется запускать postmaster в фоновом режиме с включенным ведением журнала.
ПРИМЕЧАНИЕ
Приложение pg_ctl запускает и останавливает сервер PostgreSQL За дополнительной информацией об этой команде обращайтесь к главе 9.
Этап 9. Настройка сценария SysV для PostgreSQL
Сценарий SysV позволяет корректно управлять работой PostgreSQL в системе SysV и выполнять такие операции, как запуск, остановка и проверка состояния. Он работает в большинстве версий Linux на базе Red Hat, включая Mandrake. Кроме того, после небольшой модификации он должен работать и в других системах SysV (UnixWare, Solaris и т. д.). Сценарий называется linux. Перед использованием его необходимо предварительно скопировать в каталог init.d. Возможно, для этого вам понадобятся права root.
Сначала перейдите в каталог, в котором были распакованы исходные тексты PostgreSQL (в нашем примере это /usr/local/src/postgresql-7.1.3/). Скопируйте сценарий из каталога contrib/start-scripts в каталог init.d командой (листинг 2.19).
Листинг 2.19. Копирование сценария linux
$ cd /usr/local/src/postgresql-7.1.3/
$ su -с "ср contrib/start-scripts/linux /etc/re.d/init.d/postgresql"
В листинге 2.19 копии присваивается имя postgresql. Хотя имя сценария выбирается произвольно, обычно используется имя postgresql или postgres.
После копирования файл сценария необходимо сделать исполняемым. Для этого используется команда, приведенная в листинге 2.20.
Листинг 2.20. Назначение права исполнения для сценария SysV
$ su -с "chmod a+x /etc/re.d/init.d/postgresql"
Для использования сценария SysV в Red Hat ничего больше не требуется, если вы намерены ограничиться ручным запуском PostgreSQL. Но если сценарий должен автоматически запускать PostgreSQL при загрузке компьютера (или смене уровня исполнения), необходимо установить программу chkconfig. После установки программы chkconfig в начало файла /etc/rc.d/init.d/postgresql включаются следующие две строки (вместе с символом #):
# Chkconfig: 345 85 15
# description: PostgreSQL RDBMS
Приведенные в этом примере параметры будут нормально работать в вашей системе. Тем не менее полезно представлять себе смысл выполняемых действий. Первая группа цифр (345) представляет уровни исполнения, на которых запускается PostgreSQL. В нашем примере PostgreSQL запускается на уровнях 3, 4 и 5. Второе число (85) определяет приоритет запуска PostgreSQL по отношению к другим программам. Большое значение означает, что PostgreSQL запускается позже
других программ. Третье число (15) определяет относительный приоритет завершения PostgreSQL. Оно должно быть небольшим, чтобы программы завершались в порядке, обратном порядку их запуска. Как было сказано выше, сценарий должен работать с указанными параметрами, но при необходимости их можно изменить.
После того как эти две строки будут включены в сценарий, в Red Hat и Mandrake Linux для запуска PostgreSQL можно использовать команды, приведенные в листинге 2.21. Команды выполняются только с правами root.
Листинг 2.21. Запуск PostgreSQL с использованием сценария SysV
$ service postgresql start
Starting PostgreSQL:ok $ service postgresql stop Stopping PostgreSQL:ok
ПРИМЕЧАНИЕ
По умолчанию сценарий SysV направляет всю выводимую отладочную информацию PostgreSQL в файл /usr/local/pgsql/data/serverlog.
Этап 10. Создание базы данных
После запуска СУБД PostgreSQL можно переходить к настройке прототипа базы данных templatel. Если все базы данных, которые вы планируете создавать в будущем, будут обладать одним набором системных параметров, установите эти параметры для шаблона templatel. Например, если вы собираетесь программировать на языке PL/lgSQL, включите поддержку языка в templatel перед выполнением команды createdb. В этом случае созданная база данных унаследует атрибуты прототипа templatel, включая поддержку языка PL/pgSQL. За дополнительной информацией об установке языка PL/pgSQL в базе данных обращайтесь к главе И.
На следующем шаге создается новая база данных. В наших примерах будет использоваться простая тестовая база, использовать прототип templatel для экспериментальных целей не рекомендуется. Поскольку ни один пользователь с правом создания баз данных еще не определен, войдите в систему под именем postgres. Позднее вы научитесь создавать пользователей с правом создания баз данных, эта тема обсуждается в главе 10. Новая база данных testdb создается командой, приведенной в листинге 2.22.
Листинг 2.22. Создание базы данных
$ createdb testdb
CREATE DATABASE
Сообщение CREATE DATABASE означает, что создание базы данных прошло успешно. Операции с созданной базой данных могут выполняться через клиента psql, предоставляющего интерфейс командной строки PostgreSQL Для этого следует ввести команду, приведенную в листинге 2.23.
Листинг 2.23. Обращение к базе данных через psql
$ psql testdb
Теперь можно вводить команды SQL (например, SELECT) в приглашении psql. Программа psql описана в главе 4.
Чтобы убедиться в нормальной работе базы данных, попробуйте ввести команду, приведенную в листинге 2.24. Команда выводит перечень всех языков, установленных в базе данных.
Листинг 2.24. Запрос к системной таблице
testdb=# SELECT * FROM pg_language |
||||
lanname | lanispl | lanpltrusted | lanplcallfoid | lancompiler |
internal |
f |
f |
о |
n/a |
С |
f |
f |
о |
/bin/cc |
sql |
f |
f |
о |
postgres |
(3 rows) |