GrabDuck

Установка и настройка PostgreSQL в CentOS

:

Комментариев нет

По-умолчанию в CentOS 6.4 идет Postgresql версии 8.4. Нам не надо такую старую, поэтому первым делом нужно добавить официальный репозиторий и запретить установку старых пакетов. Все операции выполняются под root'ом.

Идем сюда и смотрим ссылку на последнюю стабильную версию для CentOS. На момент написания статьи это была версия 9.2, ссылка на пакет была такой

Скачиваем его командой wget:

wget http://yum.postgresql.org/9.2/redhat/rhel-6-x86_64/pgdg-centos92-9.2-6.noarch.rpm

Если система выдает сообщение, что wget - неизвестная команда, его нужно установить:

yum install wget -y

После успешной установки повторяем запрос. Итак, Файл репозитория скачался, пора его импортировать:

rpm -i pgdg-centos92-9.2-6.noarch.rpm

Теперь необходимо запретить системе устанавливать старые пакеты из стандартного репозитория. Открываем любым редактором файл /etc/yum.repos.d/CentOS-Base.repo и добавляем в секции [base] и [updates] строку

exclude=postgresql*

Должно получиться примерно так (комментарии удалены):


[base]
name=CentOS-$releasever - Base
mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=os
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6
exclude=postgresql*

[updates]
name=CentOS-$releasever - Updates
mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=updates
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6
exclude=postgresql*

[extras]
name=CentOS-$releasever - Extras
mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=extras
#baseurl=http://mirror.centos.org/centos/$releasever/extras/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6

[centosplus]
name=CentOS-$releasever - Plus
mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=centosplus
#baseurl=http://mirror.centos.org/centos/$releasever/centosplus/$basearch/
gpgcheck=1
enabled=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6

[contrib]
name=CentOS-$releasever - Contrib
mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=contrib
#baseurl=http://mirror.centos.org/centos/$releasever/contrib/$basearch/
gpgcheck=1
enabled=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6

Теперь нужно обновить локальную копию списка пакетов:

yum update

А вот теперь можно установить сервер:

yum install postgresql92-server -y

Теперь сервер нужно настроить. Инициализируем его:

service postgresql-9.2 initdb

и добавим в автозагрузку:

chkconfig postgresql-9.2 on

Все настройки сервера хранятся в каталоге /var/lib/pgsql/9.2/data/. Отредактируем файл pg_hba.conf

vim /var/lib/pgsql/9.2/data/pg_hba.conf

В этом файле несколько строк, которые отвечают за параметры доступа к серверу. Следует обратить внимание на строку

local   all   all   ident

Не вдаваясь в детали скажу, что эта строка разрешает подключение локальных пользователей к серверу без ввода логина и пароля, если пользователь авторизован в системе. Пока не будем ничего менять, вернемся сюда позже. Сейчас нужно войти в систему под именем пользователя postgres:

su postgres

Запускаем оболочку psql

bash-4.1$ psql

Нас пускают без ввода пароля, выдавая окно приветствия:

psql (9.2.4)
Введите "help", чтобы получить справку.

postgres=#

Зададим пользователю postgres пароль, чтобы иметь возможность более простым способом авторизоваться в СУБД. Ввод точки с запятой в конце команды обязателен.

ALTER ROLE postgres WITH PASSWORD 'postgres';

Система ответит:

ALTER ROLE

Можно покинуть интерпретатор, для этого вводим в консоли команду

postgres=# \q

Выходим из-под пользователя postgres:

bash-4.1$ exit

Теперь внесем изменения в вышеуказанный файл pg_hba, приведя его примерно к такому виду:

# "local" is for Unix domain socket connections only
local   all             all                                     md5
# IPv4 local connections:
host    all             all             127.0.0.1/32            md5
host    all             all             192.168.1.2/32          md5

Первая строка разрешает подключение к СУБД для всех локальных пользователей, но при этом требует с них ввод пароля. Вторая делает практически то же самое, но мы эту строку оставим для того, чтобы подключаться к СУБД могли даже те пользователи, у кого нет системной учетной записи, а есть только роль в СУБД. Например, Вы добавили несколько баз данных и указали для них владельцев, но при этом не хотите, чтобы они имели возможность входить в систему. При этом эти люди не будут ограничены в работе со своей базой данных.

Последняя строка разрешает подключаться к любой базе любому пользователю с адреса 192.168.1.2, требуя взамен логин и пароль. Чтобы эта настройка работала, необходимо в файле postgresql.conf раскомментировать и изменить строку

#listen_addresses = 'localhost'

на

listen_addresses = '*'

Это заставит СУБД слушать все сетевые интерфейсы в поисках входящих подключений. Удобно (и очень опасно), если Вы хотите управлять СУБД через pgAdmin удаленно. Остальные настройки можно оставить по-умолчанию.

Перезапускаем службу:

service postgresql-9.2 restart

Если всё нормально, видим:

Останавливается служба postgresql-9.2:                     [  OK  ]
Запускается служба postgresql-9.2:                         [  OK  ]

Пробуем подключиться от имени пользователя postgres:

psql -U postgres

Поздравляю! Можете приступать к изучению консольных команд PostgreSQL. В самом простом случае Вам нужно будет создать пользователя СУБД и добавить для него базу данных. Запустите интерпретатор psql:

psql -U postgres

Введите команды:

CREATE ROLE abcd WITH PASSWORD 'dcba' LOGIN;
CREATE DATABASE aabbccdd WITH OWNER abcd;

Вы только что создали пользователя abcd с паролем dcba, разрешили ему вход в СУБД и добавили базу данных, указав, что ее владельцем является этот новый пользователь, т. е. он имеет все необходимые привилегии для работы с этой базой. Если захотите подключиться к БД aabbccdd от имени пользователя abcd, введите в консоли команду psql с вот этими ключами:

psql -U abcd -d aabbccdd

Если не указать ключ -d и имя БД следом за ним, PostgreSQL попытается подключиться к БД с тем же названием, что и имя текущего пользователя, не найдет ее и выдаст сообщение об ошибке.