Устанавливаем БД postgresql для высоконагруженных вэб-серверов

Стандартно мы используем http://www.postgresql.org/ версии 8.3.x.

Базы данных хранятся в кодировке WINDOWS-1251, этого хватает для большинства сайтов.

Не путайте кодировку базы с кодировкой перловых скаляров! DBD::Pg всегда присылает правильные Unicode-скаляры, если при соединении установлен флажок pg_enable_utf8. Итак, перейдем к процессу установки и описанию: Инсталляция сервера Сервер собирается из исходников, но без особенных выкрутасов. Код устанавливается в /usr/local/pgsql/, база данных находится в /var/db/pgsql, сервер слушает на порту 5234.

Приступим к установке: распаковать архив, перейти в каталог; скомпилировать:

./configure --prefix=/usr/local/pgsql/  make make install</h6>

Базы данных хранятся во внутренней кодировке WINDOWS-1251 (Postgresql 7.3.x не умеет правильно сортировать строки в Unicode); для правильной работы нужно создать локаль ru_RU.CP1251 !/LocaleCp1251; Создаём служебный каталог для daemontools:


mkdir  /etc/daemontools/pgsql/ mkdir /etc/daemontools/pgsql/log/</strong>

Создаём файл /etc/daemontools/pgsql/run со следующим содержимым:

#! /bin/sh rm -f  /var/db/pgsql/postmaster.pid exec 2>&1  exec setuidgid pgsql env -  \         LC_ALL=ru_RU.CP1251 \ /usr/local/pgsql/bin/postmaster -D  /var/db/pgsql -p 5234</h6>

Строчка с удалением .pid-файла нужна для того, чтобы при жёстком падении сервера он адекватно взлетал обратно;

Создаём файл /etc/daemontools/pgsql/log/run со следующим содержимым:

#! /bin/sh exec multilog t  /var/log/pgsql/</h6>

Делаем оба файла исполняемыми и добавляем сервис под управление svscan’ом:

chmod +x /etc/daemontools/pgsql/run  /etc/daemontools/pgsql/log/run ln -s /etc/daemontools/pgsql /service</h6>

Проверяем, что сервис работает: svstat /service/pgsql/ В случае успеха должны увидеть что-то вроде:

/service/pgsql/: up (pid 27925) 28  seconds</h6>

Логи сервера, как обычно, сыплются в /var/log/pgsql/current. Postgresql слушает на «порту» 5234. Данные находятся в каталоге /var/lib/pgsql/. Административные задачи нужно выполнять из-под unix-пользователя pgsql. Создание базы данных Из-под пользователя pgsql:

createdb -p 5234 -E WINDOWS-1251  example</h6>

к базе данных прилагается пользователь:

createuser -p 5234 -A -D example</h6>

Makefile доступа к базе Для удобства в основном каталоге проекта должен находиться Makefile, с помощью которого можно легко получить доступ к используемой базе. Обычно при этом содержимое Makefile выглядит так:

 .PHONY: all all:
 .PHONY: psql  psql:         psql -U iunity -p 5234 iunity</h6>

(для отступа используется символ табуляции, а не пробелы!) Таким образом, набрав команду “make psql”, мы попадаем в интерфейс командной строки, который позволяет работать с указанной базой данных. Иностранные языки Стандартно мы используем Postgresql 8.3.x и кодировку хранения WINDOWS-1251; однако, если нужно создать сайт, на котором используются ещё какие-то языки, кроме русского и английского (см. Welt), то возникает проблема (решабельная). В Postgresql 8.3 можно создать базу, использующую кодировку хранения UTF-8 (флажок -E при создании); однако, при этом есть две проблемы — не работает сортировка и функции UPPER()/LOWER(). Возможны следующие варианты: использовать для таких сайтов Postgresql 8.x и UTF-8 в качестве кодировки хранения; перекодировать символы, не умещающиеся в Windows-1251, в HTML-entities, и писать в базу в таком виде. Это решение пригодно, если не надо пользоваться двумя вышеупомянутыми возможностями, либо если можно это легко делать на стороне перла. Второе решение используется в Welt. Дополнительные настройки В конфигурационном файле (/srv/db/pgsql/postgresql.conf) некоторые опции отличаются от дефолтных:


vacuum_freeze_min_age     50000000

track_counts    on

autovacuum     on

log_autovacuum_min_duration    1000

autovacuum_max_workers    3

autovacuum_naptime     3600

autovacuum_vacuum_threshold     50

autovacuum_analyze_threshold     50

autovacuum_vacuum_scale_factor    0.2

autovacuum_analyze_scale_factor 0.1

autovacuum_freeze_max_age     2000000

autovacuum_vacuum_cost_delay     20

autovacuum_vacuum_cost_limit     100

No related posts.

You can leave a response, or trackback from your own site.

Оставить комментарий

*