August 31, 2026 · by Alex M.
PostgreSQL — одна из самых мощных и зрелых реляционных систем управления базами данных (РСУБД) с открытым исходным кодом. Она выделяется строгим соблюдением стандартов SQL, полной поддержкой ACID-транзакций, широкими возможностями расширения и отличной производительностью при работе с большими объёмами данных.
Если вы разворачиваете современные веб-приложения, REST API, ERP-системы или платформы аналитики на VPS NVMe, PostgreSQL может стать оптимальным выбором. Это руководство покажет, как установить, защитить и оптимизировать PostgreSQL на VPS под управлением Ubuntu 22.04 или Debian 12.
Прежде чем перейти к установке, разберёмся, в чём преимущества PostgreSQL:
Для серьёзных проектов на VPS SSD PostgreSQL обеспечивает надёжную и масштабируемую основу.
sudoЕсли у вас ещё нет сервера, вы можете заказать VPS Linux у CLIQHOST прямо сейчас.
Перед установкой обновите список пакетов и систему:
sudo apt update && sudo apt upgrade -y
Это предотвратит конфликты зависимостей и гарантирует установку актуальных пакетов.
sudo apt install postgresql postgresql-contrib -y
Пакет postgresql-contrib включает полезные расширения: uuid-ossp, pg_stat_statements, hstore и другие.
Для установки последней стабильной версии (например, PostgreSQL 16):
# Установка зависимостей
sudo apt install -y gnupg2 wget
# Добавление GPG-ключа
wget -qO - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add -
# Добавление репозитория
echo "deb http://apt.postgresql.org/pub/repos/apt $(lsb_release -cs)-pgdg main" | \
sudo tee /etc/apt/sources.list.d/pgdg.list
# Обновление и установка
sudo apt update && sudo apt install postgresql-16 postgresql-client-16 -y
sudo systemctl status postgresql
psql --version
Вы должны увидеть: psql (PostgreSQL) 16.x
PostgreSQL автоматически создаёт системного пользователя postgres, связанного с суперпользователем базы данных. Подключитесь следующим образом:
sudo -i -u postgres
psql
Или напрямую:
sudo -u postgres psql
Вы увидите приглашение postgres=#. Для выхода используйте \q.
Это наиболее важный шаг. Незащищённая установка — серьёзная уязвимость.
sudo -u postgres psql
ALTER USER postgres WITH PASSWORD 'ОченьНадёжныйПароль!2024';
\q
Никогда не используйте суперпользователя postgres напрямую в приложениях. Создавайте отдельных пользователей с минимальными привилегиями:
CREATE USER app_user WITH PASSWORD 'ПарольПриложения!456';
CREATE DATABASE app_db OWNER app_user;
GRANT ALL PRIVILEGES ON DATABASE app_db TO app_user;
Файл pg_hba.conf управляет аутентификацией. Откройте его:
sudo nano /etc/postgresql/16/main/pg_hba.conf
Для безопасных локальных подключений убедитесь, что используется метод scram-sha-256:
# TYPE DATABASE USER ADDRESS METHOD
local all all scram-sha-256
host all all 127.0.0.1/32 scram-sha-256
host all all ::1/128 scram-sha-256
После изменений перезапустите сервис:
sudo systemctl restart postgresql
Если удалённый доступ к PostgreSQL не нужен, оставьте listen_addresses со значением localhost в postgresql.conf:
sudo nano /etc/postgresql/16/main/postgresql.conf
listen_addresses = 'localhost'
Если удалённый доступ необходим, укажите точный IP-адрес и защитите порт 5432 с помощью правильно настроенного файрвола.
-- Список баз данных
\l
-- Создание базы данных
CREATE DATABASE new_project;
-- Подключение к базе данных
\c new_project
-- Удаление базы данных
DROP DATABASE new_project;
CREATE TABLE clients (
id SERIAL PRIMARY KEY,
name VARCHAR(100) NOT NULL,
email VARCHAR(150) UNIQUE NOT NULL,
created_at TIMESTAMP DEFAULT NOW()
);
-- Вставка
INSERT INTO clients (name, email) VALUES ('Иван Иванов', '[email protected]');
-- Чтение
SELECT * FROM clients WHERE email LIKE '%@example.md';
-- Обновление
UPDATE clients SET name = 'Иван Петров' WHERE id = 1;
-- Удаление
DELETE FROM clients WHERE id = 1;
| Команда | Описание |
|---|---|
\l |
Список баз данных |
\c <db> |
Подключение к БД |
\dt |
Список таблиц |
\d <table> |
Структура таблицы |
\du |
Список пользователей |
\timing |
Время выполнения запросов |
\q |
Выход из psql |
Значения по умолчанию в postgresql.conf весьма консервативны. На VPS с NVMe-хранилищем их стоит скорректировать для повышения производительности.
Откройте файл конфигурации:
sudo nano /etc/postgresql/16/main/postgresql.conf
# Память
shared_buffers = 256MB # 25% доступной ОЗУ
effective_cache_size = 768MB # 75% общей ОЗУ
work_mem = 16MB # на операцию сортировки/хеширования
maintenance_work_mem = 128MB # для VACUUM, CREATE INDEX
# Подключения
max_connections = 100 # подбирайте под нагрузку приложения
# Checkpoint
checkpoint_completion_target = 0.9
wal_buffers = 16MB
# Полезное логирование
log_min_duration_statement = 500 # логировать запросы дольше 500 мс
log_line_prefix = '%t [%p]: [%l-1] user=%u,db=%d,app=%a,client=%h '
После изменений:
sudo systemctl reload postgresql
Воспользуйтесь онлайн-инструментом PGTune для автоматической генерации оптимальных параметров в зависимости от ОЗУ, CPU и типа нагрузки.
Регулярные бэкапы критически важны. PostgreSQL предоставляет утилиты pg_dump и pg_dumpall. Если вам нужна профессиональная настройка резервного копирования, воспользуйтесь услугами администрирования серверов CLIQHOST.
sudo -u postgres pg_dump app_db > /backup/app_db_$(date +%Y%m%d_%H%M%S).sql
sudo -u postgres pg_dump -Fc app_db > /backup/app_db_$(date +%Y%m%d).dump
sudo -u postgres pg_dumpall > /backup/all_databases_$(date +%Y%m%d).sql
# Из SQL-файла
sudo -u postgres psql app_db < /backup/app_db_20240115.sql
# Из custom-формата (.dump)
sudo -u postgres pg_restore -d app_db /backup/app_db_20240115.dump
crontab -e
Добавьте:
0 2 * * * sudo -u postgres pg_dump -Fc app_db > /backup/app_db_$(date +\%Y\%m\%d).dump 2>/var/log/pg_backup.log
-- Активные запросы
SELECT pid, now() - pg_stat_activity.query_start AS duration,
query, state
FROM pg_stat_activity
WHERE (now() - pg_stat_activity.query_start) > interval '5 minutes';
-- Топ медленных запросов (требуется pg_stat_statements)
SELECT query, calls, total_exec_time, mean_exec_time
FROM pg_stat_statements
ORDER BY mean_exec_time DESC
LIMIT 10;
sudo nano /etc/postgresql/16/main/postgresql.conf
shared_preload_libraries = 'pg_stat_statements'
Перезапустите и активируйте расширение:
sudo systemctl restart postgresql
sudo -u postgres psql -c "CREATE EXTENSION IF NOT EXISTS pg_stat_statements;"
SELECT pg_database.datname,
pg_size_pretty(pg_database_size(pg_database.datname)) AS size
FROM pg_database
ORDER BY pg_database_size(pg_database.datname) DESC;
PostgreSQL использует механизм хранения MVCC, который требует периодической очистки с помощью VACUUM:
-- Vacuum конкретной таблицы
VACUUM ANALYZE clients;
-- Полный vacuum (блокирует таблицу!)
VACUUM FULL clients;
-- Переиндексация
REINDEX TABLE clients;
Autovacuum включён по умолчанию и выполняет эту задачу автоматически. Для больших баз данных его параметры можно дополнительно настроить в postgresql.conf.
ssl = on в postgresql.confДля продвинутой защиты на уровне сервера воспользуйтесь услугами администрирования серверов CLIQHOST. Если вы рассматриваете выделенный сервер под нагрузку большой БД, изучите наши управляемые выделенные серверы.
PostgreSQL — отличный выбор для любого проекта, которому требуется высокая целостность данных, масштабируемость и гибкость. Правильно установленный и настроенный на вашем VPS Linux, он станет надёжной основой для веб-приложений, API и бизнес-систем.
Нужен производительный сервер для PostgreSQL? Изучите предложения VPS NVMe от CLIQHOST — быстрое NVMe-хранилище, выделенные ресурсы и техническая поддержка. Предпочитаете полностью управляемую среду? Ознакомьтесь с нашими услугами администрирования серверов.
Есть вопросы? Свяжитесь с нами — наша команда готова помочь.
Реальные отзывы клиентов, которые доверяют CLIQHOST за производительность, надёжность и профессиональную техническую поддержку.
"Перенесли интернет-магазин с зарубежного хостинга — разница огромная: страницы открываются мгновенно, а поддержка отвечает за минуты, на румынском."
"Перенесли 12 клиентских сайтов на CLIQHOST. Бесплатная миграция, нулевой даунтайм, а настройка cPanel — именно то, что нужно нашей команде. Очень рекомендую."
"Наш VPS NVMe спокойно держит пики трафика. Полный root, локальный дата-центр и оплата в MDL — всё, что мы хотели от провайдера."