Зауважте: коли ваш веб-проєкт виростає за межі кількох тисяч запитів на хвилину, PostgreSQL часто стає вузьким місцем. Неправильна конфігурація — причина повільних запитів, втрати даних і простоїв. Сповільнена генерація звітів і нескінченне завантаження UI — типові симптоми. Налаштування індексів і пулу з'єднань вирішує ці проблеми. Ми налаштовуємо PostgreSQL так, щоб ви забули про бази даних і зосередилися на бізнесі. Наша команда має багаторічний досвід роботи з PostgreSQL, сертифікованих фахівців та понад 50 успішних проєктів. Гарантуємо стабільну роботу бази даних.
Наприклад, нещодавній проєкт: інтернет-магазин з каталогом у 100 000 товарів. Після налаштування індексів та pgBouncer час відповіді API скоротився з 2 секунд до 300 мс, а навантаження на CPU впало в 3 рази. Це дозволило заощадити на серверних потужностях близько 150 000 рублів на рік.
Чому варто обрати PostgreSQL для веб-додатку?
PostgreSQL — не просто реляційна база. Вона підтримує JSONB для гнучких схем, повнотекстовий пошук, складні запити з віконними функціями та розширення на кшталт PostGIS. Для стартапів і enterprise-проєктів це вибір, який окупається при зростанні навантаження. PostgreSQL обробляє JSONB у 2-3 рази швидше за MySQL, а за можливостями індексування випереджає багато комерційних СУБД. Перехід з Oracle на PostgreSQL дозволяє економити до 500 000 рублів на рік на ліцензіях. Якщо вам потрібна надійність і масштабованість — PostgreSQL із правильним налаштуванням вирішить завдання.
Як ми налаштовуємо PostgreSQL: покрокове керівництво
Процес налаштування складається з аудиту, встановлення, оптимізації параметрів, індексів, реплікації та моніторингу. Розглянемо ключові кроки.
Встановлення та базова конфігурація
Встановлюємо останню стабільну версію PostgreSQL на Ubuntu Server LTS:
apt install -y postgresql-16 postgresql-client-16
systemctl enable postgresql
systemctl start postgresql
Створюємо базу та користувача:
CREATE USER myapp WITH PASSWORD 'strong_password_here';
CREATE DATABASE myapp_production OWNER myapp;
GRANT ALL PRIVILEGES ON DATABASE myapp_production TO myapp;
Ключові параметри postgresql.conf
Налаштування за замовчуванням розраховані на сервер із 256 МБ ОЗП. Для production мінімум — коригування під реальну пам'ять. Порівняйте для різних обсягів:
| Параметр | 4 ГБ RAM | 8 ГБ RAM | 16 ГБ RAM |
|---|---|---|---|
| shared_buffers | 1 ГБ | 2 ГБ | 4 ГБ |
| effective_cache_size | 3 ГБ | 6 ГБ | 12 ГБ |
| work_mem | 32 МБ | 64 МБ | 128 МБ |
| maintenance_work_mem | 256 МБ | 512 МБ | 1 ГБ |
| max_connections | 100 | 200 | 400 |
Приклад конфігурації для 8 ГБ (параметри для 16 ГБ закоментовані):
shared_buffers = 2GB
#shared_buffers = 4GB
work_mem = 64MB
#work_mem = 128MB
maintenance_work_mem = 512MB
#maintenance_work_mem = 1GB
checkpoint_completion_target = 0.9
wal_buffers = 64MB
#wal_buffers = 128MB
max_worker_processes = 8
#max_worker_processes = 16
max_parallel_workers_per_gather = 4
#max_parallel_workers_per_gather = 8
max_parallel_workers = 8
#max_parallel_workers = 16
shared_preload_libraries = 'pg_stat_statements'
Коли потрібен pgBouncer?
Прямі підключення до PostgreSQL дорогі: кожне — окремий процес. pgBouncer мультиплексує їх, скорочуючи кількість з'єднань у 5-10 разів. Це критично для high-load додатків із сотнями одночасних підключень. Налаштовуємо пул:
[databases]
myapp_production = host=127.0.0.1 port=5432 dbname=myapp_production
[pgbouncer]
listen_port = 6432
pool_mode = transaction
default_pool_size = 25
max_client_conn = 1000
Індекси та партиціонування
Оптимізація запитів починається з правильних індексів. Використовуємо часткові та складові індекси, GIN для JSONB, повнотекстовий пошук. Для великих таблиць — партиціонування по місяцях через pg_partman. Приклади:
CREATE INDEX CONCURRENTLY idx_orders_user_id ON orders(user_id);
CREATE INDEX CONCURRENTLY idx_products_category_price ON products(category_id, price) WHERE deleted_at IS NULL;
CREATE INDEX CONCURRENTLY idx_articles_search ON articles USING gin(to_tsvector('russian', title || ' ' || body));
| Тип індексу | Коли використовувати | Приклад |
|---|---|---|
| B-tree | Сортування, діапазони, точні збіги | id, email |
| GIN | Компоненти масиву, JSONB, повнотекстовий пошук | tags, metadata |
| GiST | Геодані, повнотекстовий пошук (менша точність) | coordinates, tsquery |
На одному проєкті (фінансова система) ми прискорили формування місячного звіту з 30 секунд до 500 мілісекунд за допомогою часткових індексів.
Як виявити повільні запити?
Вмикаємо pg_stat_statements для збору статистики. Моніторинг показує топ-10 запитів за часом виконання. Наприклад, на одному проєкті ми виявили, що проста заміна full-scan на індексний пошук скоротила час звіту з 10 секунд до 500 мс. Крім того, регулярно перевіряємо невикористовувані індекси за допомогою pg_stat_user_indexes. Офіційна документація PostgreSQL рекомендує використовувати pg_stat_statements для моніторингу продуктивності.
Реплікація та бекапи
Налаштовуємо реплікацію з потоковою реплікацією (hot standby) та WAL-архівуванням в S3 через WAL-G. Регулярні логічні бекапи pg_dump. Це забезпечує відновлення на будь-який момент часу при збої. WAL-G — це сучасний інструмент для резервного копіювання, рекомендований спільнотою PostgreSQL.
Що входить у налаштування PostgreSQL під ключ
- Аудит поточної конфігурації та навантаження
- Встановлення PostgreSQL + pgBouncer з оптимізацією під сервер
- Налаштування індексів і партиціонування
- Налаштування реплікації (hot standby) та автоматичних бекапів
- Моніторинг повільних запитів і невикористовуваних індексів
- Документація всіх налаштувань і навчання вашої команди
- Гарантія 30 днів на виконані роботи
Строки орієнтовно
- Встановлення та базове налаштування: 1–2 дні
- Налаштування pgBouncer, реплікації та моніторингу: 2–3 дні
- Міграція існуючої бази з hot standby та автоматичними бекапами: 3–5 днів (залежить від обсягу даних)
Вартість розраховується індивідуально після аудиту. Типовий проєкт обходиться від 30 000 до 100 000 рублів залежно від складності.
Проконсультуйтеся з нашим інженером з налаштування PostgreSQL. Оцінимо ваш проєкт та запропонуємо оптимальне рішення. Замовте аудит вашої PostgreSQL сьогодні — це безкоштовно.
Додаткові ресурси: PostgreSQL Documentation.







