PostgreSQL или Postgres – это универсальная объектно-реляционная система управления базами данных с открытым исходным кодом и множеством дополнительных функций, позволяющих создавать отказоустойчивые среды или сложные приложения.
В этой статье мы обсудим, как установить сервер базы данных PostgreSQL на CentOS 8. Прежде чем выбрать версию для установки, убедитесь, что ваши приложения поддерживают ее.
Мы также рассмотрим основы администрирования баз данных PostgreSQL.
Необходимые компоненты
Чтобы иметь возможность устанавливать пакеты, вам необходимо войти в систему как пользователь root или пользователь с правами sudo.
Установка PostgreSQL на CentOS 8
На момент написания этой статьи существует две версии сервера PostgreSQL, доступные для установки из стандартных репозиториев CentOS: версии 9.6 и 10.0.
Чтобы вывести список доступных потоков модуля PostgreSQL, введите:
dnf module list postgresql
Выходные данные показывают, что модуль postgresql доступен с двумя потоками. Каждый поток имеет два профиля: сервер и клиент. По умолчанию используется поток 10 с профильным сервером:
CentOS-8 - AppStream Name Stream Profiles Summary postgresql 10 [d] client, server [d] PostgreSQL server and client module postgresql 9.6 client, server [d] PostgreSQL server and client module
- Чтобы установить поток по умолчанию, введите PostgreSQL server версии 10.0:
sudo dnf install @postgresql:10
- Для установки сервера PostgreSQL версии 9.6 введите:
sudo dnf install @postgresql:9.6
Вы также можете установить пакет contrib, который предоставляет несколько дополнительных функций для базы данных PostgreSQL:
sudo dnf install postgresql-contrib
После завершения установки инициализируйте базу данных PostgreSQL с помощью следующей команды:
sudo postgresql-setup initdb
Initializing database ... OK
Запустите службу PostgreSQL и включите ее для запуска при загрузке:
sudo systemctl enable --now postgresql
Используйте средство psql для проверки установки, подключившись к серверу баз данных PostgreSQL и распечатав его версию:
sudo -u postgres psql -c "SELECT version();"
PostgreSQL 10.6 on x86_64-redhat-linux-gnu, compiled by gcc (GCC) 8.2.1 20180905 (Red Hat 8.2.1-3), 64-bit
Роли и методы аутентификации PostgreSQL
PostgreSQL обрабатывает разрешения доступа к базе данных, используя понятие ролей. Роль может представлять пользователя базы данных или группу пользователей базы данных.
PostgreSQL поддерживает несколько методов аутентификации. Наиболее часто используемые методы:
- Trust – роль может подключаться без пароля, если выполняются условия, определенные в нем pg_hba.conf.
- Password – роль может подключаться, предоставляя пароль. Пароли могут храниться в виде scram-sha-256,md5, и password (открытый текст).
- Ident – поддерживается только для соединений TCP/IP. Он работает путем получения имени пользователя операционной системы клиента, с дополнительным сопоставлением имен пользователей.
- Peer – то же самое, что и Ident, но он поддерживается только на локальных соединениях.
Аутентификация клиента PostgreSQL определяется в файле конфигурации с именем pg_hba.conf. По умолчанию для локальных соединений PostgreSQL настроен на использование метода одноранговой аутентификации.
Пользовател postgresь автоматически создается при установке сервера PostgreSQL. Этот пользователь является суперпользователем для экземпляра PostgreSQL. Это эквивалентно пользователю root MySQL.
Чтобы войти на сервер PostgreSQL в качестве postgresпользователя, сначала переключитесь на пользователя, а затем откройте приглашение PostgreSQL с помощью утилиты psql:
sudo su - postgres psql
Отсюда вы можете взаимодействовать с экземпляром PostgreSQL. Чтобы выйти из оболочки PostgreSQL, введите:
\q
Вы также можете получить доступ к командной строке PostgreSQL без переключения пользователей sudo с помощью этой команды:
sudo -u postgres psql
Обычно пользователь postgres используется только из localhost.
Создание роли и базы данных PostgreSQL
Только суперпользователи и роли с привилегиями CREATEROLE могут создавать новые роли.
В следующем примере мы создадим новую роль с именем andreyex, базу данных с именем andreyexdb и предоставим права доступа к базе данных.
- Во-первых, подключитесь к оболочке PostgreSQL:
sudo -u postgres psql
- Создайте новую роль PostgreSQL, используя следующую команду thr:
create role andreyex;
- Создание новой базы данных:
create database andreyexdb;
- Предоставьте пользователю права доступа к базе данных, выполнив следующий запрос:
grant all privileges on database andreyexdb to andreyex;
Включить удаленный доступ к серверу PostgreSQL
По умолчанию сервер PostgreSQL прослушивает только локальный интерфейс 127.0.0.1.
Чтобы включить удаленный доступ к серверу PostgreSQL, откройте файл конфигурации:
sudo nano /var/lib/pgsql/data/postgresql.conf
Прокрутите вниз до раздела CONNECTIONS AND AUTHENTICATION и добавьте/отредактируйте следующую строку:
#------------------------------------------------------------------------------ # CONNECTIONS AND AUTHENTICATION #------------------------------------------------------------------------------ # - Connection Settings - listen_addresses = '*' # what IP address(es) to listen on;
Сохраните файл и перезапустите службу PostgreSQL с помощью:
sudo systemctl restart postgresql
Проверьте изменения с помощью утилиты ss:
ss -nlt | grep 5432
LISTEN 0 128 0.0.0.0:5432 0.0.0.0:* LISTEN 0 128 [::]:5432 [::]:*
Вывод выше показывает, что сервер PostgreSQL прослушивает порт по умолчанию на всех интерфейсах (0.0.0.0).
Последним шагом является настройка сервера для приема удаленных подключений путем редактирования файла pg_hba.conf.
Ниже приведены некоторые примеры, показывающие различные случаи использования:
# TYPE DATABASE USER ADDRESS METHOD # The user jane can access all databases from all locations using an md5 password host all jane 0.0.0.0/0 md5 # The user jane can access only the janedb database from all locations using an md5 password host janedb jane 0.0.0.0/0 md5 # The user jane can access all databases from a trusted location (192.168.1.134) without a password host all jane 192.168.1.134 trust
Вывод
CentOS 8 предоставляет две версии PostgreSQL: 9.6 и 10.0.
Для получения дополнительной информации по этому вопросу посетите документацию PostgreSQL (https://www.postgresql.org/docs/10.0/static/index.html).
Если вы столкнулись с проблемой или имеете обратную связь, оставьте комментарий ниже.