В этой статье мы расскажем как установить базу данных PostgreSQL 9.4 на операционную систему Centos 6.5 / 7. Почему выбор пал на PostgreSQL? Пообщавшись с администраторами баз данных, было принято решение попробовать поработать на данной БД, т.к. в отличие от MySQL, PostgreSQL обладает лучшей производительностью и гибкостью настроек.
Как всегда, немного теории.
PostgreSQL это Open Source объектно-реляционная база данных, она развивается уже более 15 лет. PostgreSQL поддерживает такие операционные системы, как Linux, UNIX (AIX, BSD, HP-UX, SGI IRIX, Mac OS X, Solaris, Tru64) и Windows, поддерживает типы данных: INTEGER, NUMERIC, BOOLEAN, CHAR, VARCHAR, DATE, INTERVAL, и TIMESTAMP, так же БД поддерживает хранение больших объектов данных, включая изображения, звуки и видео. PostgreSQL поддерживает языки програмирования C/C++, Java, .Net, Perl, Python, Ruby, Tcl, ODBC и многие другие.
Теперь перейдем к установке PostgreSQL.
1) Репозитарии PostgreSQL лежат на официальном сайте здесь. В нашем случае мы используем архитектуру x86_x64 под Centos 6.5. Добавляем репозитарий в Centos:
rpm -Uvh http://yum.postgresql.org/9.4/redhat/rhel-6-x86_64/pgdg-centos94-9.4-1.noarch.rpm
Для версии Centos i386:
rpm -Uvh http://yum.postgresql.org/9.4/redhat/rhel-6-i386/pgdg-centos94-9.4-1.noarch.rpm
Для Centos 7:
rpm -Uvh http://yum.postgresql.org/9.4/redhat/rhel-7-x86_64/pgdg-centos94-9.4-1.noarch.rpm
2) Обновляем систему.
yum update
3) Установим PostgreSQL и некоторые утилитки:
yum install postgresql94-server postgresql94-contrib postgresql94-libs postgresql94-devel
Введем еще раз команду:
yum update
4) Инициализируем базу данных PostgreSQL.
service postgresql-9.4 initdb
В Centos 7 выполняем следующую команду:
/usr/pgsql-9.4/bin/postgresql94-setup initdb
5) Запускаем сервис и добавляем в автозагрузку.
service postgresql-9.4 start
chkconfig postgresql-9.4 on
В Centos 7 выполняем следующее:
systemctl enable postgresql-9.4
systemctl start postgresql-9.4
На этом установка закончена. Теперь сделаем дополнительные настройки.
6) Настроим IPTABLES. Для этого добавим в файл /etc/sysconfig/iptables следующие строчки:
-A INPUT -m state --state NEW -m tcp -p tcp --dport 5432 -j ACCEPT
Перезапускаем сервис IPTABLES
service iptables restart
В Centos 7 надо сделать следующее:
firewall-cmd --permanent --add-port=5432/tcp
firewall-cmd --reload
При включенном SELinux, так же необходимо будет ввести следующую команду:
setsebool -P httpd_can_network_connect_db 1
7) Отредактируем файл /var/lib/pgsql/9.4/data/postgresql.conf.
nano /var/lib/pgsql/9.4/data/postgresql.conf
В строке listen_addresses = 'localhost' заменим localhost на "*". Должно получится следующее listen_addresses = '*'. Это говорит PostgreSQL принимать запросы со всех интерфейсов.
8) Далее редактируем файл /var/lib/pgsql/9.4/data/pg_hba.conf. В конце файла добавляем строчку
host all all 192.168.1.0/24 md5
Этим мы даем возможность подключатся к PostgreSQL из нашей локальной сети 192.168.1.0, 255.255.255.0, используя алгоритм MD5.
Перезапускаем службу PostgreSQL
service postgresql-9.4 restart
9) В течении установки PostgreSQL добавляет пользователя "postgres", и вся первоначальная работа ведется от данного пользователя. Переключаемся на пользователя postgres. И создадим нового пользователя asterisk.
su postgres
createuser -sdrP asterisk
Потребуется дважды ввести пароль для нового пользователя.
10) Для подключения к PostgreSQL, необходимо ввести следующую команду:
su postgres# psql
Появится окно диалога
psql (8.4.20, server 9.4.1)
WARNING: psql version 8.4, server version 9.4.
Some psql features might not work.
Type "help" for help.
postgres=#
*Как обновить psql до версии PostgreSQL, я сходу не понял. Если напишите в комментариях, буду благодарен.
Для выхода из диалогового она наберите:
postgres=# \q
Для установки пароля на пользователя postgres, сделайте следующее:
postgres=# \password postgres
Enter new password:
Enter it again:
postgres=# \q
11) Ну и напоследок, создадим базу данных asteriskcdrdb и дадим пользователю asterisk права на эту базу.
su postgres
# createdb asteriskcdrdb
#psql
postgres=# GRANT ALL PRIVILEGES ON DATABASE asteriskcdrdb TO asterisk;