# Базы данных ## PostgreSQL ### Установка Установка `PostgreSQL` в `Ubuntu`: ```sh sudo apt update sudo apt install postgresql postgresql-contrib ``` Установка в `Solus`: ```sh sudo eopkg it postgresql postgresql-contrib ``` Пакет `postgresql-contrib` содержит дополнительные утилиты и функциональные возможности. В процессе установки создаётся учётная запись `postgres`, которая связана с используемой по умолчанию ролью `postgres`. ### Использование После установки, чтобы подключиться к СУБД PostgreSQL необходимо открыть `shell` из под пользователя `postgres`: ```sh sudo -i -u postgres ``` где `-i` запуск оболочки входа в систему от имени целевого пользователя `-u postgres`. После входа в оболочку под пользователем `postgres` запустить утилиту `psql`: ```sh psql ``` Или использовать более быстрый способ: ```sh sudo -u postgres psql ``` ### Создание новой роли После входа в оболочку под пользователем `postgres`, можно создать новую роль с помощью следующей команды: ```sh createuser --interactive ``` При создании необходимо будет ввести имя новой роли и указать, будет ли являться новая роль суперпользователем: ```sh Enter name of role to add: user Shall the new role be a superuser? (y/n) y ``` Для любой роли, используемой для входа, существует база данных с тем же именем, к которой роль может получить доступ. Это означает, что если созданный пользователь будет иметь имя `user`, эта роль попытается подключиться к базе данных, которая также называется `"user"` по умолчанию. Необходимо создать соответствующую базу данных: ```sh createdb user ``` При этом должен существовать пользователь Linux с тем же именем, что и имя роли и базы данных в Postgres. ### Смена пароля Для установки/смены пароля выполнить в `psql` команду: ```sh \password user ``` где `user` - имя пользователя, у которого необходимо сменить пароль. ### Удалённый доступ Для открытия удалённого доступа необходимо отредактировать файл `/etc/postgresql/14/main/postgresql.conf`, где `14` - версия PostgreSQL: ```sh sudo nano /etc/postgresql/14/main/postgresql.conf ``` Раскомментировать параметр `listen_addresses` и установить в качестве значения звёздочку (`*`): ```sh listen_addresses = '*' ``` Сохранить и перезагрузить сервер PostgreSQL, в `Ubuntu`: ```sh sudo systemctl restart postgresql.service ``` в других дистрибутивах: ```sh sudo service postgresql restart ``` ### Восстановление бэкапа Восстановление бэкапа из файла `*.sql`: ```sh psql -f backup.sql ``` ### Возможные ошибки При подключении к удалённой БД может возникнуть ошибка: ```sh FATAL: no pg_hba.conf entry for host "192.168.56.1", user "user", database "user", SSL encryption ``` где `192.168.56.1` - адрес компьютера, с которого происходит подключение, `user` - имя пользователя, от которого происходит подключение, а также имя базы данных. Необходимо отредактировать файл `/etc/postgresql/14/main/pg_hba.conf`, где 14 - версия PostgreSQL: ```sh sudo nano /etc/postgresql/14/main/pg_hba.conf ``` и добавить запись: ```sh host all user 192.168.56.1/32 scram-sha-256 ``` которая разрешает доступ логина `user` к любой базе данных с IP-адреса `192.168.56.1`.