Установка PostgreSQL на FreeBSD

PostgreSql — очень мощная свободная объектно-реляционная система управления базами данных (СУБД).
Существует в реализациях для следующих платформ: Linux, Solaris/OpenSolaris, Win32, Mac OS X, FreeBSD, QNX 4.25, QNX 6
PostgreSQL базируется на языке SQL и поддерживает многие из возможностей стандарта SQL:2003
Сильными сторонами PostgreSQL считаются:
— поддержка БД практически неограниченного размера;
— мощные и надёжные механизмы транзакций и репликации;
— расширяемая система встроенных языков программирования: в стандартной поставке поддерживаются PL/pgSQL, PL/Perl, PL/Python и PL/Tcl; дополнительно можно использовать PL/Java, PL/PHP, PL/Py, PL/R, PL/Ruby, PL/Scheme и PL/sh, а также имеется поддержка загрузки C-совместимых модулей[5];
— наследование;
— легкая расширяемость.

В общем это очень достоя СУБД для корпоративных приложений.
Рассмотрим установку на FreeBSD
Текущая версия  FreeBSD 8.2, PostgreSQL 8.4 (есть уже 9, но далеко не все приложения совместимы с ней)
Установка Postgresql

# cd /usr/ports/databases/postgresql84-server/
# make install clean

Задаем пароль  pgsql:

# passwd pgsql
Changing local password for pgsql
New Password:
Retype New Password:

Устанавливаем каталог баз данных, что нравится — /home/pgsql или /var/pgsql:

# mkdir /var/pgsql
# chpass pgsql 

На всякий случай копируем все файлы(у меня было пусто) из стандартной директории в нашу новую директорию

# mv /usr/local/pgsql/* /var/pgsql/
# mkdir /var/pgsql/data

Выставляем права доступа к каталогу базы данных:

#chown -R pgsql:pgsql /var/pgsql/
#chmod -R 750 /var/pgsql/

Добавляем в /etc/rc.conf строчки для автозагрузки БД:

postgresql_enable="YES"
postgresql_data="/var/pgsql/data"
postgresql_class="postgres"

Инициализируем кластер БД:

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

У меня отругалось следующим образом

Файлы, сопутствующие этой системе баз данных, будут
принадлежать пользователю "pgsql". Этот пользователь
также должен быть владельцем процесса сервера.
Кластер баз данных будет инициализирован со следующими локалями:
  COLLATE:  C
  CTYPE:    ru_RU.KOI8-R
  MESSAGES: ru_RU.KOI8-R
  MONETARY: ru_RU.KOI8-R
  NUMERIC:  ru_RU.KOI8-R
  TIME:     ru_RU.KOI8-R
initdb: несоответствие кодировки
Кодировка которую вы выбрали (UTF8) и кодировка выбранной
локали (KOI8R) не совпадают.  Это может привести к неожиданным
результатам в различных функциях связанных с обработкой строк.
Для исправления  перезапустите initdb и, либо не указывайте
кодировку, либо задайте правильную комбинацию кодировки и локали.

PostgreSQL 8.x использует кодировку UTF-8 по умолчанию. Ругань происходит из-за несоответствия локалей. К сожалению на данный момент FreeBSD еще не поддерживает в консоли UTF-8 🙁
Вы можете добавить поддержку UTF-8 по этой заметке.
После чего, сделать следующее :

# добавляем это в /etc/rc.conf
postgresql_class="russian-utf8"
# Выполняем эту команду в консоли
pw usermod pgsql -L russian-utf8

И выполняем инициализацию кластера снова

# /usr/local/etc/rc.d/postgresql initdb
Файлы, сопутствующие этой системе баз данных, будут
принадлежать пользователю "pgsql". Этот пользователь
также должен быть владельцем процесса сервера.
Кластер баз данных будет инициализирован со следующими локалями:
  COLLATE:  C
  CTYPE:    ru_RU.UTF-8
  MESSAGES: ru_RU.UTF-8
  MONETARY: ru_RU.UTF-8
  NUMERIC:  ru_RU.UTF-8
  TIME:     ru_RU.UTF-8
Конфигурация полнотекстового поиска по умолчанию установлена в "russian".

исправление прав на существующую директорию /var/pgsql/data ... ок
создание поддиректорий ... ок
выбирается значение по умолчанию для max_connections ... 40
selecting default shared_buffers ... 28MB
создание конфигурационных файлов ... ок
создание базы template1 в /var/pgsql/data/base/1 ... ок
инициализация pg_authid ... ок
инициализация зависимостей ... ок
создание системных представлений ... ок
загрузка системных описаний объектов ... ок
создание конверсий ... ок
создание словарей ... ок
установка привилегий для встроенных объектов ... ок
создание информационной схемы ... ок
сборка мусора в базе template1 ... ок
копирование template1 в template0 ... ок
копирование template1 в postgres ... ок

ВНИМАНИЕ: используется аутентификация "trust" для локальных подключений.
Вы можете её поменять, отредактировав pg_hba.conf или используя опцию -A,
при следующем выполнении initdb.

Успех. Вы теперь можете запустить сервер баз данных:

    /usr/local/bin/postgres -D /var/pgsql/data
или
    /usr/local/bin/pg_ctl -D /var/pgsql/data -l logfile start

По завершении процедуры инициализации мы получили базу по адресу /usr/local/pgsql/data/. Наш сервер готов к запуску.

————————————————————————————
Для исправления ситуации можно также использовать стандартный способ.
Добавляем следующие строки в /etc/login.conf

postgres:\
        :lang=en_US.UTF-8:\
        :setenv=LC_COLLATE=C:\
        :tc=default:

Перестраиваем БД для login

# cap_mkdb /etc/login.conf

Устанавливаем класс postgres для юзера pgsql

# pw usermod pgsql -L postgres

И в /etc/rc.conf обязательно должна быть строчка (мы ее добавили раньше…)

postgresql_class="postgres"

————————————————————————————

Запускаем PostgreSQL Server

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

Проверка состояния сервера

# /usr/local/etc/rc.d/postgresql status
pg_ctl: выполняется сервер (PID: 1261)
/usr/local/bin/postgres "-D" "/var/pgsql/data"

Управление пользователями 
Изначально сервер сконфигурирован так, что любые подключения возможны с локальной машины без пароля. Конечно, это не очень безопасно, поэтому первое, что сделаем, ограничим доступ к серверу без пароля.
Есть 2 способа управлять базами данных и пользователями PosgreSQL:
—  утилиты коммандной строки (createuser, createdb, dropuser, dropdb и др.)
—  интерактивный терминал.
Воспользуемся интерактивным терминалом psql для настройки прав доступа.
Заходим в базу.
Проверяем кодировку, чтоб убедиться, что она UTF-8. Выставляем пароль pgsql, который является суперпользователем. А затем создаем нового пользователя. Затем проверяем, какие пользователи есть и с какими привелегиями.

# psql -U pgsql template1
template1=# \encoding
UTF8
template1=# ALTER USER pgsql WITH PASSWORD 'пароль';
ALTER ROLE
template1=#CREATE USER пользователь WITH CREATEDB LOGIN PASSWORD 'пароль';
CREATE ROLE
template1=# \du
            List of roles
 Role name | Attributes  | Member of
-----------+-------------+-----------
 pgsql     | Superuser   | {}
           : Create role
           : Create DB
пользователь| Create DB   | {}

Ctrl+D

Примечание: получить справку можно с помощью команд «\h» и «\?». Получить справку по конкретной команде можно дописав ее после \h (Например \h drop user)
Изменяем доступ к базе данных, правя /var/pgsql/data/pg_hba.conf: доступ по IPv6 отключаем, комментируя строчку

# host all all ::1/128 trust

локальный доступ к БД по паролю, меняем trust на md5 (вместо пароля будет храниться его md5 хеш):

local all all md5
host all all 127.0.0.1/32 md5

Рестратуем PostgreSQL

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

Графические средства для управления PostgreSQL
Несмотря на всю мощь командной строки для тех, кто постоянно не занимается базами данных учить кучу команд просто нецелесообразно. В таких случаях могут помочь графические программы. Вот несколько из них:
phpPgAdmin – как видно из названия, написана на PHP, т.е. удобна в тех случаях, когда с базой работает веб-приложение. Для работы требуется любой веб-сервер с поддержкой PHP.
pgAdmin – кроссплатформенное приложение, написанное на C++. Поддерживает множество платформ: FreeBSD, Linux, Mac OS, Windows. Пользователи FreeBSD могут установить приложение из портов: /usr/ports/databases/pgadmin3/.

Ссылки:
www.postgresql.org
Wikipedia — PostgreSQL
Lissyara — Установка PostgreSQL
postgresql.ru.net (рус)
Установка PostgreSQL на FreeBSD
Офф. дока по увеличению значений накладываемых ядром на PostgreSQL
Источник http://nix-sa.blogspot.com/2011/04/postgresql-freebsd.html

Запись опубликована в рубрике *Unix,*Linux. Добавьте в закладки постоянную ссылку.

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

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

Я не спамер This plugin created by Alexei91