Постановка задачи 
Хочу поднять PostgreSQL на локальном компьютере (Manjaro + KDE) для учебных целей и управлять им через pgAdmin и psql .
Решение 
Мой выбор пал на Docker, поскольку он позволяет реализовать задуманное с наименьшими затратами времени и минимальным влиянием на остальную систему. А ещё потому что я не смог быстро поставить pgAdmin напрямую в Manjaro ¯\(ツ)/¯
В начале установите Docker, если он у вас ещё не установлен.
Мы будем поднимать два контейнера: один с PostgreSQL, другой — с pgAdmin. Объединим их при помощи docker compose. Создайте следующий файл в рабочей директории:
version: "3.8"
services:
postgres:
image: postgres:16.3-alpine
environment:
POSTGRES_PASSWORD: postgres
POSTGRES_USER: postgres
ports:
- "5432:5432"
volumes:
- postgres:/var/lib/postgresql/data
pgadmin:
image: dpage/pgadmin4:8.6
environment:
PGADMIN_DEFAULT_EMAIL: admin@pgadmin.com
PGADMIN_DEFAULT_PASSWORD: password
PGADMIN_LISTEN_PORT: 80
ports:
- "15432:80"
volumes:
- pgadmin:/var/lib/pgadmin
depends_on:
- postgres
volumes:
postgres:
pgadmin:
Я пробрасываю наружу 5432
порт, потому что хочу работать с postgres-ом из хостовой ОС через psql
.
Управление контейнерами 
Чтобы запустить контейнеры в фоне, выполните команду
docker compose up -d
в директории с описанным выше docker-compose.yaml
файлом.
👉 После того как контейнеры запустятся, на http://localhost:15432/ будет доступна веб-версия pgAdmin.
Данные для входа прописаны в docker-compose.yaml
:
- Логин:
admin@pgadmin.com
— полеPGADMIN_DEFAULT_EMAIL
- Пароль:
password
— полеPGADMIN_DEFAULT_PASSWORD
При необходимости их можно поменять.
После первого запуска нажмите “Add New Server”, чтобы подключиться к PostgreSQL.
- Host name/address:
postgres
— название контейнера c postgres вdocker-compose.yaml
- Username:
postgres
— полеPOSTGRES_USER
- Password:
postgres
— полеPOSTGRES_PASSWORD
Profit 🎆. Пользуйтесь pgAdmin.
Чтобы остановить контейнеры, выполните команду
docker compose down
При этом данные и PostgreSQL и pgAdmin останутся и будут доступы при следующем запуске контейнера. Они хранятся в docker volume-ах, которые мы описали в docker-compose.yaml
.
Данные pgAdmin 
В pgAdmin можно сохранять файлы: бэкапы, ER диаграммы баз. Проводник в GUI pgAdmin показывает, что они лежат в корне файловой системы. Не верьте ему! На самом деле они лежат в docker volume (очевидно), но не в его корне (уже менее очевидно, но факт).
Посмотреть файлы в контейнере:
- Заходим в контейнер:
docker exec -it <containerName> sh
- Внутри docker-контейнера переходим в директорию пользователя
cd /var/lib/pgadmin/storage/admin_pgadmin.com
admin_pgadmin.com
— email пользователя, в котором @
заменён на _
- Вот тут-то они и притаились. Можно взглянуть на содержимое директории через
ls -lah
, просмотреть файлы при помощиless
и даже открыть их вvi
!
Стянуть файлы из контейнера в хостовую ОС:
docker cp <containerId>:/file/path/within/container /host/path/target
Имя и Id контейнера можно узнать, взглянув на список запущенных контейнеров командой
docker ps
💡Docker-контейнерами можно управлять при помощи утилиты lazydocker.
Бэкапы в pgAdmin 
Для того, чтобы файлы бэкапов имели человекочикаемый вид, их нужно создавать со следующими настройками:
❗ Впоследствии мне не удалось восстановить БД в pgAdmin через такой бэкап, в отличие от бэкапа с форматом Custom
— они создаются по умолчанию.
psql 
Подключиться к контейнеру с postgres-ом можно командой:
psql -h localhost -p 5432 -U postgres -d dbname
dbname
— имя БД, к которой подключаемся
Данные для входа прописаны в docker-compose.yaml
:
- Логин:
postgres
— полеPOSTGRES_USER
- Пароль:
postgres
— полеPOSTGRES_PASSWORD
При необходимости их можно поменять.
Бэкапы БД в SQL формате 
Создание бэкапа БД 
pg_dump -h HOST -p 5432 -U USER_NAME DABASE_NAME > backup.sql
Накатывание данных в БД из бэкапа 
- Удаляем существующую БД, если нужно
dropdb -h HOST -p 5432 -U USER_NAME -f "DABASE_NAME"
- Создаём новую БД
psql -h HOST -p 5432 -U USER_NAME postgres -c "create database DABASE_NAME"
- Накатываем из бэкапа
psql -h HOST -p 5432 -U USER_NAME -d DABASE_NAME < backup.sql
В заключение 
🦁 Порекомендую интересующимся пройти “Интерактивный тренажер по SQL” на Stepik. Курс содержит теоретическую информацию по SQL и множество практических заданий с автоматической проверкой.