PostgreSQL.Концепция.

Концепция

СУБД PostgreSQL управляет кластером баз:

один экземпляр PostgreSQL может запускать и контролировать набор баз данных, которые

изолированы друг от друга, и при этом обслуживаются через один и тот же сокет TCP/IP (UNIX-сокеты

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

что должно быть достаточно системных ресурсов и незанятых TCP/IP сокетов.

Кластер основан на процессной схеме: сервис запускает главный процесс (исторически называемый

postmaster), который ожидает входящие клиентские подключения. При первом соединении postmaster

создаёт копию самого себя и этот новый процесс начинает обслуживание клиента. Он называется backend.

 

Кластер использует файловую систему для хранения всех баз и их данных: есть главная директория

(индивидуальная на кластер), называемая PGDATA, состоящая из нескольких поддиректорий, по

одной на каждую базу, которые, в свою очередь,хранят все объекты в базе (таблицы, генераторы

последовательностей и т.п.). Также можно реализовать хранение данных вне PGDATA, например, в другом

каталоге, за счет механизма tablespace. Конфигурация PostgreSQL, в основном, хранится в нескольких

текстовых файлах, которые обычно находятся внутри PGDATA.

Из вышеизложенного читатели могут видеть, что для обслуживания нескольких кластеров на одной и

той же машине для каждого экземпляра должно быть выполнено следующее:

• отдельный сокет TCP/IP, на котором postmaster будет работать и ожидать клиентские

подключения;

• отдельная структура PGDATA;

• отдельный набор конфигурационных файлов (обычно хранимых в PGDATA).

 

Базовая инсталляция

Установить PostgreSQL на машине с FreeBSD можно через систему портов: сначала требуется установить

порт -server, который в свою очередь установит порт -client, необходимого для доступа к кластеру (т.е. для

обеспечения соединения к процессам backend). По желанию, можно также установить и модуль -contrib, в

котором хранятся дополнительные полезные утилиты по управлению экземплярами PostgreSQL.

Прежде, чем мы начнем процесс установки, вам нужно выбрать правильную версию. PostgreSQL

формируется в форме

головнойномер.версия.минорная версия

(например, 9.1.2).

В случае, если отличие версии находится в строке головнойномер.версия, содержащей главный номер

релиза и номер версии, обычно приходится делать дамп данных и проводить реинициализацию. В версиях

PostgreSQL, которые отличаются только минорной версией, совместимость не нарушается, поэтому для

них реинициализацию делать не требуется. 

В Листинге 1 приведены шаги, необходимые для установки сервера 9.1 (и клиентского окружения);

 

Листинг 1. Устанавливаем PostgreSQL из портов

# cd /usr/ports/databases/postgresql91-server/

# make install clean

# cd /usr/ports/databases/postgresql91-contrib/

# make install clean

# id pgsql

uid=70(pgsql) gid=70(pgsql) groups=70(pgsql)

# pkg_info -cs ‚postgresql*’

Information for postgresql-client-9.1.2:

Comment:

PostgreSQL database (client)

Package Size:

7914 (1K-blocks)

Information for postgresql-contrib-9.1.2:

Comment:

The contrib utilities from the PostgreSQL distribution

Package Size:

1647 (1K-blocks)

Information for postgresql-server-9.1.2:

Comment:

The most advanced open-source database available anywhere

Package Size:

14621 (1K-blocks)

 

Устанавливаются пакеты как для клиентской и серверной части и добавляется пользователь pgsql. Он нужен

для запуска серверных процессов PostgreSQL в непривилегированном режиме.

Как только СУБД установлена, то должен быть создан и новый кластер. Чтобы сделать это, для PostgreSQL

PGDATA должна быть назначена новая директория.

Только лишь создать директорию недостаточно, т.к. она должна быть инициализирована командой

initdb(1), чтобы PostgreSQL могла размещать в ней свои структуры данных кластера. Все кластерные

процедуры, включая инициализацию, старт, остановку и получение статуса кластера могут быть произведены

через исполняемый скрипт /usr/local/etc/rc.d/postgresql, который, в свою очередь, вызывает нужную

команду (обычно pg_ctl(1) или initdb(1)) посредством непривилегированного пользователя pgsql. Как и

для многих остальных сервисов, очень важно внести в файл rc.conf нужную строчку, разрешающую

запуск PostgreSQL. А также внести туда значение переменной PGDATA – главной директории кластера.

Это обеспечит запуск утилит из состава пакета PostgreSQL без указания каждый раз этой переменной. В

листинге 2 приводится пример стандартной установки PostgreSQL и указания переменных в rc.conf, а в

листинге 3 показано, как достичь того же результата с помощью определения папки PGDATA в командной

строке.

После инсталляции из листинга 2, самое время запустить сервис и проверить, работает ли он.

 

Листинг 2. Инициализируем кластер без PGDATA

# echo ‘postgresql_enable=”YES”’ >> /etc/rc.conf

# echo ‘postgresql_data=”/postgresql/cluster1”’ >> /etc/rc.conf

# mkdir -p /postgresql/cluster1

# chown pgsql:pgsql /postgresql/cluster1/

# /usr/local/etc/rc.d/postgresql initdb

 

Листинг 3. Инициализируем кластер с PGDATA

# mkdir /postgresql/anotherCluster

# chown pgsql:pgsql /postgresql/anotherCluster

# su -l pgsql -c „exec /usr/local/bin/initdb -D /postgresql/anotherCluster”

 

Обратите внимание, что пока не создана ни база данных, ни пользователи, которые могут ею

распоряжаться. Поэтому вам потребуется от имени пользователя pgsql подключиться к СУБД (см. листинг

4). Соединение с кластером (как и к любой его базой данных) происходит посредством команды psql(1),

которая выглядит как интерактивная оболочка. Либо же вы можете запускать SQL-запросы в пакетном

режиме.

 

Листинг 4. Запускаем PostgreSQL и получаем первую информацию о ней

# service postgresql start

# /usr/local/bin/psql -l -U pgsql

List of databases

Name | Owner | Encoding | Collate | Ctype | Access privileges

————+——-+———-+———+————-+——————-

postgres | pgsql | UTF8 | C | en_US.UTF-8 |

template0| pgsql | UTF8 | C | en_US.UTF-8 | =c/pgsql +

| | | | | pgsql=CTc/pgsql

template1 | pgsql | UTF8 | C | en_US.UTF-8 | =c/pgsql +

| | | | | pgsql=CTc/pgsql

  

Анатомия свежеустановленного экземпляра базы

Как показано в листинге 4, кластер уже содержит две важных базы данных, готовых к работе: template1

и template0. Эти две шаблонных базы работают в качестве каркаса для других баз, которые будут в

дальнейшем созданы администратором СУБД. Обе они создаются во время инициализации кластера (т.е.

когда запускается initdb(1)). Любая новая база будет клонирована из template1, т.к. template0 выступает

в качестве дублирующей копии для template1, в случае, если последняя будет разрушена. Обратите,

пожалуйста, внимание, что к этим шаблонным базам можно подключаться как к обычным базам данным.

Единственным владельцем директории PGDATA

является пользователь psql. В ней хранятся конфигурационные данные для всего кластера, а

также файлы с данными – основные параметры Обратите внимание, что для восстановления

или миграции кластера не достаточно обычного бекапа на уровне файловой системы; требуются

более сложные процедуры, типа Point In Time Recovery (более подробно о ней будет сказано позже).

Каждый объект базы идентифицируется по своему уникальному номеру, называемому OID (Object Identi-fier)

 и сохраняется в файловой системе (в директории PGDATA) в файле, имя которого совпадает с этим

номером. Файл с данными может разрастись максимум до размера в 1Гб, после чего будет разбит

на сегменты, название которых будет формироваться как OID и соответствующая часть счетчика.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *