В этой статье мы рассмотрим как установить PostgreSQL 12 в Ubuntu 18.04 из репозитория.

Данная процедура описана в официальной документации

Создадим файл /etc/apt/sources.list.d/pgdg.list и добавим строку для хранилища:

 RELEASE=$(lsb_release -cs)
echo "deb http://apt.postgresql.org/pub/repos/apt/ ${RELEASE}"-pgdg main | sudo tee  /etc/apt/sources.list.d/pgdg.list

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

wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add - 
sudo apt update

Установим PostgreSQL 12

sudo apt -y install postgresql-12

Открываем конфигурацию сервера

 sudo mcedit /etc/postgresql/12/main/postgresql.conf

Для разрешения доступа только с этого сервера убираем комментарий со строки

 listen_addresses = 'locahost'

и перезагружаем сервер

 sudo systemctl restart postgresql

Подключаемся под пользователем postgres

 su postgres 
 psql 
CREATE DATABASE myproject;
CREATE USER srmuser WITH PASSWORD 'PASSWORD';

Затем изменим несколько параметров подключения для только что созданного нами пользователя. Это ускорит работу базы данных, поскольку теперь при каждом подключении не нужно будет запрашивать и устанавливать корректные значения.

Зададим кодировку по умолчанию UTF-8, чего и ожидает Django. Также зададим схему изоляции транзакций по умолчанию «read committed», которая будет блокировать чтение со стороны неподтвержденных транзакций. В заключение мы зададим часовой пояс. По умолчанию наши проекты Django настроены на использование времени по Гринвичу (UTC). Все эти рекомендации взяты из проекта Django:

ALTER ROLE srmuser SET client_encoding TO 'utf8';
ALTER ROLE srmuser SET default_transaction_isolation TO 'read committed';
ALTER ROLE srmuser SET timezone TO 'UTC';

Теперь предоставим созданному пользователю доступ для администрирования новой базы данных:

GRANT ALL PRIVILEGES ON DATABASE myproject TO srmuser;

Выходим из консоли PostgreSQL

 \q
 exit

PostgreSQL установлен и база данных настроена. Теперь можем перейти к настройке подключение к базе данных нашего приложения.