PostgreSQL (Postgres) — потужна СУБД для складних застосунків: підтримує JSON, повнотекстовий пошук, віконні функції та багато іншого. Перевага розробників Laravel, Django, Ruby on Rails.
Встановлення PostgreSQL 16
sudo apt update
sudo apt install -y postgresql postgresql-contrib
sudo systemctl enable postgresql
sudo systemctl start postgresql
# Перевірити версію
psql --version
Створення бази даних і користувача
# Увійти під postgres
sudo -u postgres psql
-- Створити користувача
CREATE USER myuser WITH PASSWORD 'НадійнийПароль';
-- Створити базу
CREATE DATABASE myapp OWNER myuser;
-- Надати права
GRANT ALL PRIVILEGES ON DATABASE myapp TO myuser;
\q
Налаштування віддаленого доступу
# Дозволити підключення
sudo nano /etc/postgresql/16/main/postgresql.conf
# listen_addresses = '*'
# Налаштувати автентифікацію
sudo nano /etc/postgresql/16/main/pg_hba.conf
# Додати в кінець:
# host all all 0.0.0.0/0 md5
sudo systemctl restart postgresql
sudo ufw allow 5432/tcp
⚠️ Відкривайте порт 5432 тільки для конкретних IP:
ufw allow from 203.0.113.10 to any port 5432Базова оптимізація postgresql.conf
shared_buffers = 256MB # 25% RAM
effective_cache_size = 768MB # 75% RAM
work_mem = 16MB
maintenance_work_mem = 64MB
max_connections = 100
💡 Використовуйте PGTune для автоматичного розрахунку оптимальних параметрів під ваш сервер.
Оптимізація postgresql.conf
# /etc/postgresql/16/main/postgresql.conf
# Для сервера з 8 ГБ RAM
max_connections = 100
shared_buffers = 2GB # 25% RAM
effective_cache_size = 6GB # 75% RAM
work_mem = 10MB # RAM / max_connections / 2
maintenance_work_mem = 512MB
wal_buffers = 16MB
checkpoint_completion_target = 0.9
random_page_cost = 1.1 # SSD
effective_io_concurrency = 200 # SSD
Корисні команди psql
| Команда | Опис |
|---|---|
| \l | Список баз даних |
| \c dbname | Підключитися до БД |
| \dt | Список таблиць |
| \d tablename | Структура таблиці |
| \du | Список користувачів |
💡 Використовуйте pgBouncer для connection pooling — PostgreSQL погано справляється з тисячами одночасних підключень.
Встановлення PostgreSQL
sudo apt update
sudo apt install -y postgresql postgresql-contrib
# Запустити та увімкнути автозапуск
sudo systemctl enable --now postgresql
# Перевірити
sudo systemctl status postgresql
Основні операції через psql
# Увійти як postgres (суперкористувач)
sudo -u postgres psql
-- Створити користувача
CREATE USER myapp WITH PASSWORD 'SecurePass123!';
-- Створити БД
CREATE DATABASE myapp_db OWNER myapp;
-- Надати права
GRANT ALL PRIVILEGES ON DATABASE myapp_db TO myapp;
-- Вийти
\q
Підключення та навігація
# Підключитися до конкретної БД
psql -U myapp -d myapp_db -h localhost
-- Перелік БД
\l
-- Перелік таблиць
\dt
-- Опис таблиці
\d tablename
-- Виконати SQL з файлу
\i /path/to/script.sql
Бекап і відновлення
# Бекап однієї БД
pg_dump -U myapp myapp_db > backup_$(date +%Y%m%d).sql
# Бекап усіх БД
sudo -u postgres pg_dumpall > all_databases.sql
# Відновлення
psql -U myapp -d myapp_db < backup.sql
✅ Додайте pg_dump у cron для щоденних автоматичних бекапів:
0 3 * * * pg_dump -U myapp myapp_db > ~/backups/db_$(date +\%Y\%m\%d).sql