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 за производительность, надёжность и профессиональную техническую поддержку.
"We moved our online shop from a foreign host and the difference is night and day — pages load instantly and support replies in minutes, in Romanian."
"Migrated 12 client sites to CLIQHOST. Free migration, zero downtime, and the cPanel setup is exactly what my team needed. Highly recommend."
"Our NVMe VPS handles traffic spikes without a sweat. Full root, local datacenter, and billing in MDL — everything we wanted from a provider."