Руководство администратора по PostgreSQL | ||
---|---|---|
Предыдущий | Глава 5. Установка | Следующий |
Установка Postgres
Новая установка или обновление предыдущих версий Postgres:
Прочитай всю последнюю информацию и замечания об особенностях переноса на платформу. Некоторые замечания об особенностях платформы в конце этого файла для Ultrix4.x, Linux, BSD/OS и NeXT. Другие файлы из каталога /usr/src/pgsql/doc, включая файлы FAQ-Irix и FAQ-Linux. Также загляни в каталог ftp://ftp.postgresql.org/pub. Если в этом каталоге есть файл INSTALL, то этот файл содержит последнюю информацию по установке.
Заметьте, что "тестированные" платформы из списка данного выше, просто означает, что кто-то приложил усилия в этом направлении, чтобы удостовериться, что дистрибутив Postgres компилируется и запускается на этой платформе без правки кода. Т.к. текущие разработчики не имеют доступа ко всем этим платформам, то некоторые из них могут компилироваться не чисто и проводимые регрессивные тесты текущей версии могут иметь небольшие проблемы. Все известные проблемы и решения помещаются в ftp://ftp.postgresql.org/pub/INSTALL.
Создай бюджет суперпользователя Postgres(обычно используется postgres), если он ещё не существует.
Владельцем файлов Postgres может быть любой непревелигерованный пользовательский бюджет. Им не должен быть root, bin, или любой другой бюджет со специальными правами доступа, это может создать дыру в защите.
Войди под бюджетом суперпользователя Postgres. Большинство оставшихся шагов установки будут производиться из этого бюджета.
Скачай файл ftp://ftp.postgresql.org/pub/postgresql-v6.5.1.tar.gz из Internet. Сохрани его в своём домашнем каталоге.
Некоторые платформы используют flex. Если твоя система использует flex, то удостоверься, хорошая ли у тебя версия. Чтобы проверить, набери
$ flex --version
Если команда flex не найдена, то, вероятно, она тебе не нужна. Если версия 2.5.2 или 2.5.4 или выше, то всё в порядке. Если 2.5.3 или ниже 2.5.2, то тебе надо обновить flex. Ты можешь получить его на ftp://prep.ai.mit.edu/pub/gnu/flex-2.5.4.tar.gz.
Если тебе нужен flex и у тебя его нет или неправильная версия, то тебе скажут об этом, когда ты попытаешься компилировать программу. Спокойно пропусти этот шаг, если ты не уверен, что он тебе нужен. Если ты сделаешь его нужным, то тебе скажут установить/обновить flex, когда ты попытаешься откомпилировать Postgres.
Ты можешь выполнить всю установку flex из бюджета root, хотя в этом нет абсолютной необходимости. Предполагая, что ты хочешь разместить файлы установки в местоположения по умолчанию, введи следующее:
$ su - $ cd /usr/local/src ftp prep.ai.mit.edu ftp> cd /pub/gnu/ ftp> binary ftp> get flex-2.5.4.tar.gz ftp> quit $ gunzip -c flex-2.5.4.tar.gz | tar xvf - $ cd flex-2.5.4 $ configure --prefix=/usr $ gmake $ gmake check # Ты должен быть root при наборе следующей строчки: $ gmake install $ cd /usr/local/src $ rm -rf flex-2.5.4
В результате обновятся файлы /usr/man/man1/flex.1, /usr/bin/flex, /usr/lib/libfl.a, /usr/include/FlexLexer.h и появится ссылка /usr/bin/flex++, которая указывает на flex.
Если ты не обновляешь существующую систему, пропусти всё до шага 9. Если ты делаешь обновление с 6.5, то тебе не нужно делать dump/reload или initdb. Просто компилируй исходный код, останови postmaster, выполни "make install" и перезапусти postmaster. Если ты делаешь обновление с 6.4.* или раньше, сделай резервную копию базы данных. Для релизов alpha и beta уровней, формат базы данных подвергался изменению почти каждые несколько недель, без уведомления, кроме коротких комментариев в в списке рассылки HACKERS. Полным релизам всегда необходим dump/reload из предыдущих релизов. Поэтому плохая идея пропускать этот шаг.
Подсказка: Не используй сценарий pg_dumpall из v6.0 или все, принадлежащие суперпользователю Postgres.
Чтобы выполнить дамп фактически новой после-v6.0 установки базы данных, введи
$ pg_dumpall > db.out
Чтобы использовать последний сценарий pg_dumpall существующей старой базы данных перед обновлением Postgres, вытяни наиболее свежую версию pg_dumpall из нового дистрибутива:
$ cd $ gunzip -c postgresql-v6.5.1.tar.gz \ | tar xvf - src/bin/pg_dump/pg_dumpall $ chmod a+x src/bin/pg_dump/pg_dumpall $ src/bin/pg_dump/pg_dumpall > db.out $ rm -rf src
Если ты хочешь сохранить idы объектов (oids), то используй опцию -o при запуске pg_dumpall. Однако, если у тебя нет специальный причин делать это ( например, использование OIDов как ключей в таблицах), то не делай этого.
Если, кажется, что команда pg_dumpall работает слишком долго и ты думаешь что она умерла, то из другого терминала введи
$ ls -l db.outнесколько раз, чтобы увидеть растёт ли размер файла.
Заметьте, что если ты выполняешь обновление версии ранее чем Postgres95 v1.09, то ты должен сделать резервную копию базы данных, установить Postgres95 v1.09, восстановить базу данных, затем сделать резервную копию опять. Также, тебе нужно прочитать замечания версии, которые описывают любые проблемы этой версии.
Предупреждение |
Ты должен удостовериться, что база данных не обновляется во время резервного копирования. При необходимости, опусти postmaster, отредактируй права в файле /usr/local/pgsql/data/pg_hba.conf чтобы работать мог только ты, затем подними postmaster обратно. |
Если ты обновлял существующую систему, то прибей postmaster. Введи
$ ps -ax | grep postmasterЭто даст тебе список с номерами процессов. Введи следующую строку с заменой pid на id процесса postmaster. (Не используй id процесса "grep postmaster".) Введи
$ kill pidчтобы на самом деле остановить процесс.
Подсказка: В системах, которые запускают Postgres во время загрузки, вероятно существует файл запуска, который выполняет это действие. Например, на моей Linux системе я могу набрать
$ /etc/rc.d/init.d/postgres.init stopчтобы остановить Postgres.
Если ты обновляешь существующую систему, то перемести старые каталоги куда-нибудь. Если у тебя мало места, то вместо этого можешь сделать резервную копию и удалить каталоги. Если ты поступаешь так, то сохрани старую базу данных в /usr/local/pgsql/data дереве каталогов. Как минимум, сохрани файл /usr/local/pgsql/data/pg_hba.conf.
Введи следующее:
$ su - $ cd /usr/src $ mv pgsql pgsql_6_0 $ cd /usr/local $ mv pgsql pgsql_6_0 $ exit
Если ты не используешь /usr/local/pgsql/data в качестве каталога данных (посмотри, как установлена переменная среды PGDATA), то тебе также надо бы переместить этот каталог в той же манере.
Сделай новые каталоги для исходников и установки. Фактические пути могут отличаться от твоих, но ты должен пройти через эту процедуру.
Замечание: Существует два места в процедуре установки, где ты имеешь возможность задать местоположение установки для программ, библиотек, документации, и других файлов. Обычно, достаточно задать их перед стадией установки gmake install.
Введи
$ su $ cd /usr/src $ mkdir pgsql $ chown postgres:postgres pgsql $ cd /usr/local $ mkdir pgsql $ chown postgres:postgres pgsql $ exit
Unzip и untar новый файл исходников. Введи
$ cd /usr/src/pgsql $ gunzip -c ~/postgresql-v6.5.1.tar.gz | tar xvf -
Настрой исходный код под твою систему. В этом шаге ты должен задать фактический путь установки для процесса сборки (смотри ниже опцию --prefix). Введи
$ cd /usr/src/pgsql/src $ ./configure [ options ]
Помимо других действий, сценарий configure выбирает системо-зависимый файл "шаблон" из файлов из подкаталога template. Если он не определит какая система используется, то он об этом скажет и завершится. В этом случае тебе нужно указать какой из них использовать и запустить configure снова, указав, в этот раз, опцию --with-template=TEMPLATE с правильно выбранным файлом.
Сообщай о проблемах: Если твоя система не распозналась configure автоматически и ты делал это, пожалуйста, пошли на email scrappy@hub.org вывод программы ./config.guess. Укажи, какой файл шаблона должен быть.
Задай опции конфигурации. Подробней смотри Опции конфигурации. Однако, для простой первой установки без дополнительных опций, типа поддержки мульти-байтовых символов или поддержки сравнивания из локали, можно выбрать достаточную для задач установку и запустить configure без указания дополнительных опций. Сценарий configure принимает много дополнительных опций, которые ты можешь использовать, если тебе не нравятся установки по умолчанию. Чтобы увидеть их все, введи
./configure --helpВот наиболее широко используемые:
--prefix=BASEDIR Выбрать другой начальный каталог для
установки конфигурацииPostgres.
По умолчанию /usr/local/pgsql.
--with-template=TEMPLATE
Использовать файл шаблона TEMPLATE - файлы шаблона
лежат в каталоге src/template, т.е. правильные
значения там.
--with-tcl Собирать библиотеку интерфейса и программы,
необходимые Tcl/Tk, включает libpgtcl,
pgtclsh, и pgtksh.
--with-perl Собирать библиотеку интерфейса Perl.
--with-odbc Собирать пакет драйвера ODBC.
--enable-hba Разрешить аутентификацию, основанную на хосте (ПО УМОЛЧАНИЮ)
--disable-hba Запретить аутентификацию, основанную на хосте
--enable-locale Разрешить USE_LOCALE
--enable-cassert Разрешить ASSERT_CHECKING
--with-CC=compiler
Использовать заданный компилятор C, который
сценарий configure не смог найти.
--with-CXX=compiler
--without-CXX
Использовать заданный компилятор C++, который
сценарий configure не смог найти, или исключить
компиляцию C++ целиком.(В настоящее время, это
влияет на libpq++.)
Вот сценарий configure, используемый на системе Sparc Solaris 2.5, с /opt/postgres заданный как начальный каталог установки:
$ ./configure --prefix=/opt/postgres \ --with-template=sparc_solaris-gcc --with-pgport=5432 \ --enable-hba --disable-locale
Подсказка: Конечно, ты можешь ввести все три строки в одной.
Установи документацию man и HTML. Введи
$ cd /usr/src/pgsql/doc $ gmake install
Также, документация доступна в Postscript формате. Ищи файлы, оканчивающиеся на .ps.gz в том же каталоге.
Скомпилируй программу. Введи
$ cd /usr/src/pgsql/src $ gmake all >& make.log & $ tail -f make.log
Надеемся, что последняя строка будет
All of PostgreSQL is successfully made. Ready to install.Помни, что “gmake” может называться “make” в твоей системе. Отсюда, или ранее, если хочешь, нажми control-C для выхода из tail. (Если ты имеешь проблемы, позже можно посмотреть предупреждающее и сообщения об ошибках в файле make.log.)
Замечание: Вероятно, ты обнаружишь несколько предупреждающих сообщений в make.log. Если проблемы не возникнут позднее, то эти сообщения могут ты благополучно проигнорированы.
Если компилятор потерпел неудачу с сообщением, что команда flex не найдена, то установи flex, как описывалось ранее. Затем, измени каталог обратно на этот каталог, введи
$ gmake clean, затем перекомпилируй опять.
Опции компилятора, такие как оптимизация и отладка, могут быть заданы в командной строке, с помощью переменной COPT. Например, набрав
$ gmake COPT="-g" all >& make.log &вызовет компилятор с опцией -g во всех шагах сборки. Смотри в src/Makefile.global.in остальные подробности.
Установи программу. Введи
$ cd /usr/src/pgsql/src $ gmake install >& make.install.log & $ tail -f make.install.log
Последняя отображённая строка будет
gmake[1]: Leaving directory `/usr/src/pgsql/src/man'Отсюда, или ранее, если хочешь, нажми control-C для выхода из tail. Помни, что “gmake” может называться “make” в твоей системе.
Если потребуется, скажи своей системе как найти новые разделяемые библиотеки. Ты можешь выполнить один из следующих, предпочтительно первый:
Как root, отредактируй файл /etc/ld.so.conf. Добавь строку
/usr/local/pgsql/libв файл. Затем, выполни команду /sbin/ldconfig.
В bash shell, введи
export LD_LIBRARY_PATH=/usr/local/pgsql/lib
В csh shell, введи
setenv LD_LIBRARY_PATH /usr/local/pgsql/lib
Заметьте, что команды выше могут дико отличаться в зависимости от операционных систем. Посмотри замечания по платформе, например для Ultrix4.x или для не-ELF Linux.
Если при создании базы данных, ты получаешь сообщение
pg_id: can't load library 'libpq.so', то был необходим шаг выше. Просто выполни этот шаг, затем попытайся создать базу данных снова.
Если ты используешь опцию --with-perl в configure, проверь установочный лог был ли установлен модуль Perl. Если ты следуешь нашему совету по созданию файлов Postgres, что они принадлежат непревелигерованному userid, то модуль Perl не установился, из-за отсутствия прав на запись в каталоги библиотеки Perl. Ты можешь выполнить его установку, или сейчас или позднее, став пользователем, которому принадлежит библиотека Perl (чаще root) (посредством su) и выполнив
$ cd /usr/src/pgsql/src/interfaces/perl5 $ gmake install
Если этого ещё не было сделано, то создай бюджет postgres для использования Postgres. Любой бюджет, который будет использовать Postgres должен создаваться подобным образом.
Есть несколько путей влияния на рабочую среду сервера Postgres. Обратись к Руководство администратора за полной информацией.
Замечание: Следующие инструкции для bash/sh shell. Переделай, соответственно с другими shellами.
Добавь следующие строки в твою среду входа: shell, ~/.bash_profile:
PATH=$PATH:/usr/local/pgsql/bin MANPATH=$MANPATH:/usr/local/pgsql/man PGLIB=/usr/local/pgsql/lib PGDATA=/usr/local/pgsql/data export PATH MANPATH PGLIB PGDATA
Некоторые регрессивные тесты потерпят неудачу, если пользовательская схема сравнивания из локали отличается от стандартной C локали.
Если ты настраиваешь и компилируешь Postgres с --enable-locale, то ты должен установить среду локали в “C” (или удалить все “LC_*” переменные), поместив эти дополнительные строки в свою среду входа перед запуском postmaster:
LC_COLLATE=C LC_CTYPE=C export LC_COLLATE LC_CTYPE
Убедись, что ты определил эти переменные перед тем как продолжить выполнять оставшиеся шаги. Самый лёгкий путь сделать это - это набрать:
$ source ~/.bash_profile
Создай базу данных установки из бюджета суперпользователя Postgres (обычно бюджета postgres). Не выполняй их как root! Эта главная дыра в безопасности. Введи
$ initdb
Настрой права доступа к системе баз данных. Чтобы сделать это, отредактируй файл /usr/local/pgsql/data/pg_hba.conf. Инструкции включены в файл. (Если твоя база данных расположена не местоположении по умолчанию, т.е. если указывает PGDATA куда-нибудь ещё, то размещение этого файла должно быть изменено соответственно.) Этот файл должен быть сделан только для чтения опять после завершения. Если ты выполняешь обновление с v6.0 или позже то можешь скопировать файл pg_hba.conf из своей старой базы данных в свою новую базу данных, вместо переделывания файла сначала.
Краткий тест - сервер будет запускаться и работать из командной строки.
Запусти демона postmaster в фоновом режиме, набрав
$ cd $ nohup postmaster -i > pgserver.log 2>&1 &
Создай базу данных, набрав
$ createdb
Подключись к новой базе данных:
$ psql
И запусти простой запрос:
postgres=> SELECT datetime 'now';
Выйди из psql:
postgres=> \q
Удали тестовую базу данных (если ты не хочешь использовать её позднее для других тестов):
$ dropdb
Запусти postmaster в фоновом режиме из бюджета суперпользователя Postgres (обычно, бюджет postgres). Не запускай postmaster из-под бюджета root!
Обычно, ты хочешь изменить свой компьютер так, чтобы он автоматически запускал postmaster во время начальной загрузки. Это не необходимо; сервер Postgres может успешно запускаться из непревелгерованных бюджетов без вмешательства root.
Вот несколько предположений о том как это сделать, при содействии различных пользователей.
Чтобы ты не делал, postmaster должен быть запущен суперпользователем Postgres (postgres?) и не root. Вот почему все примеры ниже начинаются с переключения пользователя (su) на postgres. Также, раз эти команды входят в другой бюджет, то переменные среды, типа PATH и PGDATA, могут быть установлены неправильно. Примеры следующие. Используй их крайне осторожно.
Если ты устанавливал из-под непривилегированного бюджета и не имеешь прав доступа root, то запусти postmaster и помести его в фоновый режим:
$ cd $ nohup postmaster > regress.log 2>&1 &
Отредактируй файл rc.local на NetBSD или файл rc2.d на SPARC Solaris 2.5.1, чтобы он содержал следующую одну строку:
su postgres -c "/usr/local/pgsql/bin/postmaster -S -D /usr/local/pgsql/data"
В FreeBSD 2.2-RELEASE отредактируй /usr/local/etc/rc.d/pgsql.sh, чтобы он содержал следующие строки и выполни на нём chmod 755 и chown root:bin.
#!/bin/sh [ -x /usr/local/pgsql/bin/postmaster ] && { su -l pgsql -c 'exec /usr/local/pgsql/bin/postmaster -D/usr/local/pgsql/data -S -o -F > /usr/local/pgsql/errlog' & echo -n ' pgsql' }Ты можешь разрывать строки как показано выше. shell достаточно умный чтобы не продолжать разбор за концом файла, если выражение не закончено. exec сохраняет один слой shell под процесс postmaster, так чтобы родителем был init.
В RedHat Linux добавь файл /etc/rc.d/init.d/postgres.init, который основан на примере из contrib/linux/. Затем сделай мягкую ссылку на этот файл из /etc/rc.d/rc5.d/S98postgres.init.
В RedHat Linux отредактируй файл /etc/inittab, добавив одну строку:
pg:2345:respawn:/bin/su - postgres -c "/usr/local/pgsql/bin/postmaster -D/usr/local/pgsql/data >> /usr/local/pgsql/server.log 2>&1 </dev/null"(Автор примера говорит, что пример будет оживлять postmaster если он умрёт, но он не знает есть ли другая сторона эффекта.)
Запусти регрессивные тесты. Файл /usr/src/pgsql/src/test/regress/README детально описывает инструкции по запуску и толкования регрессивных тестов. Сокращёная версия вот:
Введи
$ cd /usr/src/pgsql/src/test/regress $ gmake clean $ gmake all runtest
Тебе не нужно вводить gmake clean, если ты первый раз выполняешь тесты.
Ты получишь на экране (и также в файле ./regress.out) серию отчётов о состоянии, какие тесты прошли и какие тесты провалились. Заметьте, что может быть нормальным, что некоторые тесты "провалились" на некоторых платформах. Сценарий говори, что тест не прошёл, если есть любое различие между фактическим выводом теста и ожидаемым выводом. Таким образом, тесты могут "провалиться" из-за несущественной разницы в словах сообщений ошибок, маленьких различиях в округлении плавающей точки, и т.д., между твоей системой и регрессивным тестом эталонной платформы. "Провал" такого типа не указывает на проблему с Postgres. Файл ./regression.diffs содержит текстовую разницу между фактическим выводом теста на твоей машине и "ожидаемым" выводом (который просто произведен на эталонной машине). Тебе нужно осторожно исследовать каждое различие, чтобы увидеть приведёт ли оно значительной проблеме.
Например,
For a i686/Linux-ELF platform, no tests failed since this is the v6.5.1 regression testing reference platform.
Даже если результат теста точно указывает на настоящую ошибку, это может быть локальной проблемой, которая тебе повредит. Как пример, в котором провалился тест int8, может быть явно вызван некорректным выводом, если твоя машина и компилятор C не работают с 64-битным целым типом данных (или, если они работают, но configure не обнаружила этого). Это не то о чём стоит беспокоится, если тебе не нужно хранить 64-битные целые.
Вывод? Если ты увидел неудачу, постарайся понять природу различий и затем реши, как повлияет это на твои задачи использования Postgres. Регрессивные тесты - полезное инструментальное средство, но чтобы они были полезны их нужно немного исследовать..
После работы регрессивных тестов, набери
$ dropdb regression $ cd /usr/src/pgsql/src/test/regress $ gmake clean, чтобы получить обратно дисковое пространство, занятое тестами. (Можно сохранить файл regression.diffs куда-нибудь, прежде чем делать это.)
Если этого уже не было сделано, то сейчас самое время настроить свой компьютер на выполнение систематического технического обслуживания. Следующее нужно делать через регулярные интервалы:
Минимальная процедура резервного копирования
Запусти команду SQL VACUUM. Она произведёт очистку твоей базы данных.
Выполни резервное копирование системы. (Вероятно, тебе придёт сделать несколько резервных копирований вручную.) Лучше, чтобы никто не использовал систему в это время.
В идеале, задачи выше должны выполняться из сценария shell script, который запускался бы каждую ночь или неделю с помощью cron. Посмотри man страницу crontab для начала, о том как это сделать. (Если ты сделал это, пожалуйста, e-mail нам копию твоего сценария shell. Мы бы тоже хотели настроить наши системы.)
Если ты обновлял существовавшую систему, то переустанови свою старую базу данных. Введи
$ cd $ psql -e template1 < db.outЕсли ты использовал pre-v6.2 базу данных или такие геометрические типы данных как путь или многоугольник, то тебе нужно обновить все столбцы, содержащие эти типы. Чтобы выполнить это, введи (из psql)
UPDATE FirstTable SET PathCol = UpgradePath(PathCol); UPDATE SecondTable SET PathCol = UpgradePath(PathCol); ... VACUUM;Проверка UpgradePath() смотрит, использует ли значение path старый синтаксис и не обновляет столбцы, которые не проходят этот осмотр. UpgradePoly() не проверяет использует ли polygon фактически старый синтаксис, но RevertPoly() обеспечивает противоположный эффект неправильного использования обновления.
Если ты новый пользователь, ты можешь поиграться с Postgres как описано ниже.
Выполни очистку. Введи
$ rm -rf /usr/src/pgsql_6_5 $ rm -rf /usr/local/pgsql_6_5 # Also delete old database directory tree if it is not in # /usr/local/pgsql_6_5/data $ rm ~/postgresql-v6.5.1.tar.gz
Ты, вероятно, захочешь распечатать документацию. Если у тебя Postscript принтер, или на твоей машине установлен фильтр, принимающий Postscript файлы, то для печати Руководства пользователя просто введи
$ cd /usr/local/pgsql/doc $ gunzip user.ps.tz | lpr
Это же можно сделать, если ты имеешь Ghostscript в системе и принтер laserjet.
$ alias gshp='gs -sDEVICE=laserjet -r300 -dNOPAUSE' $ export GS_LIB=/usr/share/ghostscript:/usr/share/ghostscript/fonts $ gunzip user.ps.gz $ gshp -sOUTPUTFILE=user.hp user.ps $ gzip user.ps $ lpr -l -s -r manpage.hp
Команда Postgres хочет сохранить Postgres работающим на всех поддерживаемых платформах. Поэтому мы просим тебя дать знать, заработал или нет Postgres на твоей системе. Пожалуйста, пошли почтовое сообщение pgsql-ports@postgresql.org, указав следующее:
Версию Postgres (v6.5.1, 6.5, beta 990318, и т.д.).
Твою операционную систему (т.е. RedHat v5.1 Linux v2.0.34).
Твое аппаратное обеспечение (SPARC, i486, и т.д.).
Компилировалось, устанавливалось и отработали ли регрессивные тесты чисто? Если нет, какой исходный код ты изменил (т.е. применявшиеся патчи, сделанные изменения, и т.д.), какие тесты не прошли, и т.д. Предупреждающие сообщения при компиляции - это нормально. Тебе не нужно указывать их здесь.
Теперь, подключайся и управляй базами данных как хочешь. Пиши клиентские программы для доступа к серверу базы данных. Другими словами, пользуйся!
Предыдущий | Начало | Следующий |
Установка | В начало главы | Использование Postgres |