15%

Сэкономьте 15% на всех хостинговых услугах

Проверьте свои навыки и получите скидку на любой тарифный план

Используйте код:

Skills
Начать
23.10.2024
2 +1

PostgreSQL на VPS: Архитектура, настройка производительности и руководство по развёртыванию

PostgreSQL — это продвинутая объектно-реляционная система управления базами данных (ОРСУБД) с открытым исходным кодом, поддерживающая запросы как на SQL, так и на JSON, ACID-совместимые транзакции и расширяемые типы данных. При развёртывании на виртуальном выделенном сервере она получает выделенные вычислительные ресурсы, полный доступ к конфигурации на уровне ядра и сетевую изоляцию — возможности, которые общий хостинг принципиально обеспечить не может.

Для производственных нагрузок это сочетание имеет немедленное значение: неправильно настроенное значение shared_buffers на общем хостинге невозможно исправить, неконтролируемый запрос на экземпляре соседа может лишить вас I/O, а установить расширения вроде PostGIS или pg_partman без root-доступа невозможно. VPS устраняет все три ограничения одновременно.

Почему PostgreSQL превосходит другие РСУБД с открытым исходным кодом

Прежде чем рассматривать преимущества, специфичные для VPS, стоит понять, что делает PostgreSQL предпочтительным движком по сравнению с MySQL/MariaDB для сложных нагрузок.

ФункцияPostgreSQLMySQL 8.xMariaDB 10.x
Соответствие ACIDПолное, включая DDLПолноеПолное
Индексирование JSON/JSONBНативный JSONB с GIN-индексамиJSON (без бинарного хранения)JSON (без бинарного хранения)
Геопространственная поддержкаPostGIS (отраслевой стандарт)Ограниченные пространственные типыОграниченные пространственные типы
Полнотекстовый поискВстроенный, настраиваемыйБазовый индекс FULLTEXTБазовый индекс FULLTEXT
Секционирование таблицДекларативное, по диапазону/списку/хешуСекционирование поддерживаетсяСекционирование поддерживается
Параллельное выполнение запросовДа (настраиваемые воркеры)ОграниченноеОграниченное
Пользовательские типы данныхДа (CREATE TYPE)НетНет
Хранимые процедуры (PL/pgSQL)Полноценный процедурный языкБазовыеБазовые
Журнал упреждающей записи (WAL)Настраиваемый, потоковая репликацияБинарный логБинарный лог
Модель параллелизмаMVCC (без блокировок чтения)MVCCMVCC
Логическая репликацияДа (публикация/подписка)ДаДа
Обёртки внешних данныхДа (postgres_fdw и др.)НетНет

Модель многоверсионного управления параллельным доступом (MVCC) PostgreSQL заслуживает особого упоминания: читатели никогда не блокируют писателей, а писатели никогда не блокируют читателей. Это архитектурно превосходит решения для смешанных нагрузок OLTP/OLAP, где длительные аналитические запросы в противном случае блокировали бы транзакционные таблицы.

Экономическая эффективность: распределение ресурсов без избыточного выделения

Тарифный план VPS Хостинга предоставляет гарантированные ядра CPU, RAM и хранилище NVMe SSD за долю стоимости физического оборудования. Экономическая логика проста: требования PostgreSQL к памяти масштабируются в зависимости от max_connections и work_mem, а не от размера сервера. Правильно настроенный VPS с 4 ГБ RAM, обслуживающий 50 одновременных подключений, превзойдёт экземпляр с 8 ГБ RAM с настройками по умолчанию и 200 простаивающими подключениями, потребляющими общую память.

Практическая стратегия экономии: начните с VPS среднего уровня, проанализируйте фактические метрики pg_stat_activity и pg_stat_bgwriter после двух недель производственной нагрузки, а затем выполните вертикальное масштабирование. Такой подход, основанный на данных, позволяет избежать распространённой ошибки избыточного выделения ресурсов при запуске.

Один часто упускаемый из виду фактор затрат: демон autovacuum PostgreSQL требует запаса CPU. На общем хостинге autovacuum часто ограничивается провайдером, что со временем приводит к раздуванию таблиц и ухудшению планов запросов. На VPS вы управляете autovacuum_vacuum_cost_delay и autovacuum_max_workers напрямую.

Полный root-доступ и контроль над окружением

В отличие от управляемых сервисов баз данных или общего веб-хостинга, VPS предоставляет неограниченный доступ к уровню операционной системы. Это не просто удобство — это жёсткое требование для ряда возможностей PostgreSQL.

Что root-доступ позволяет делать там, где общие окружения блокируют:

  • Установка расширений PostgreSQL (CREATE EXTENSION postgis, CREATE EXTENSION pg_trgm, CREATE EXTENSION timescaledb)
  • Изменение параметров ядра, напрямую влияющих на производительность PostgreSQL (vm.overcommit_memory, vm.swappiness, huge_pages)
  • Настройка pg_hba.conf с пользовательскими методами аутентификации (SCRAM-SHA-256, LDAP, аутентификация на основе сертификатов)
  • Запуск pg_upgrade для миграций между мажорными версиями без участия провайдера
  • Монтирование выделенных томов табличных пространств на отдельных блочных устройствах для разделения I/O между индексами и файлами кучи

Критическая настройка ядра для PostgreSQL на Linux:

# Disable transparent huge pages (causes latency spikes in PostgreSQL)
echo never > /sys/kernel/mm/transparent_hugepage/enabled

# Set vm.overcommit_memory to allow PostgreSQL shared memory allocation
sysctl -w vm.overcommit_memory=2
sysctl -w vm.overcommit_ratio=80

# Reduce swappiness to prevent paging PostgreSQL shared buffers
sysctl -w vm.swappiness=1

# Persist these settings
echo "vm.overcommit_memory=2" >> /etc/sysctl.conf
echo "vm.overcommit_ratio=80" >> /etc/sysctl.conf
echo "vm.swappiness=1" >> /etc/sysctl.conf

Эти настройки недоступны для управляемых сервисов баз данных на уровне приложений и нередко являются первопричиной необъяснимой деградации производительности в облачных экземплярах PostgreSQL.

Настройка производительности: параметры postgresql.conf, которые действительно важны

Параметры установки PostgreSQL по умолчанию намеренно консервативны — они рассчитаны на работу на машине с 256 МБ RAM начала 2000-х годов. На современном VPS с 4–16 ГБ RAM и NVMe-хранилищем настройки по умолчанию оставляют большую часть аппаратных возможностей неиспользованной.

Конфигурация памяти

# postgresql.conf — tuned for a 8 GB RAM VPS, OLTP workload

# Set to 25% of total RAM
shared_buffers = 2GB

# Estimate of OS cache available to PostgreSQL (typically 50-75% of RAM)
effective_cache_size = 6GB

# Per-sort/hash operation memory (multiply by max_connections for worst case)
work_mem = 32MB

# For VACUUM, CREATE INDEX, ALTER TABLE operations
maintenance_work_mem = 512MB

# Enable huge pages if kernel supports it
huge_pages = try

Ловушка work_mem: установка work_mem = 256MB при max_connections = 100 означает, что PostgreSQL теоретически может выделить 25,6 ГБ RAM только для операций сортировки — что значительно превышает физическую память и вызывает OOM-убийства. Всегда рассчитывайте work_mem по формуле: (available_RAM - shared_buffers) / (max_connections * 2).

Конфигурация хранилища и WAL

# For NVMe SSD storage — set to 1 for spinning disks, 200 for NVMe
random_page_cost = 1.1
effective_io_concurrency = 200

# WAL configuration for durability vs. performance tradeoff
wal_buffers = 64MB
checkpoint_completion_target = 0.9
checkpoint_timeout = 10min

# For write-heavy workloads, consider asynchronous commit
# (risk: last ~1 transaction lost on crash, not data corruption)
synchronous_commit = on  # Keep 'on' for financial data

Управление подключениями

# Avoid setting this above what your application actually needs
max_connections = 100

# Use PgBouncer in transaction pooling mode for high-concurrency apps
# A VPS allows you to install and configure PgBouncer locally

PgBouncer не является опциональным для приложений с более чем 50 одновременными пользователями. Каждый серверный процесс PostgreSQL потребляет около 5–10 МБ RAM. При 200 подключениях это 1–2 ГБ, потребляемых простаивающими процессами. PgBouncer в режиме пулинга транзакций мультиплексирует сотни подключений приложений на небольшой пул реальных серверных процессов PostgreSQL.

# Install PgBouncer on Debian/Ubuntu
apt install pgbouncer

# Minimal pgbouncer.ini configuration
cat /etc/pgbouncer/pgbouncer.ini
[databases]
mydb = host=127.0.0.1 port=5432 dbname=mydb

[pgbouncer]
listen_port = 6432
listen_addr = 127.0.0.1
auth_type = scram-sha-256
auth_file = /etc/pgbouncer/userlist.txt
pool_mode = transaction
max_client_conn = 1000
default_pool_size = 20

Усиление безопасности: за пределами стандартной установки

Свежая установка PostgreSQL на VPS имеет несколько уязвимостей в системе безопасности, которые необходимо устранить до того, как экземпляр станет доступен из сети.

Изоляция на сетевом уровне

PostgreSQL никогда не должен прослушивать публичный IP-адрес, если это не является абсолютно необходимым. Привяжите его к localhost и используйте SSH-туннелирование или VPN для удалённого администрирования.

# In postgresql.conf
listen_addresses = 'localhost'

# For replication or application servers on a private network only
# listen_addresses = '127.0.0.1,10.0.0.1'

Настройте pg_hba.conf для принудительной аутентификации SCRAM-SHA-256 (стандартный метод md5 криптографически слаб):

# /etc/postgresql/16/main/pg_hba.conf
# TYPE  DATABASE        USER            ADDRESS                 METHOD
local   all             postgres                                peer
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
# Reject all other connections by default (no catch-all line)

Шифрование SSL/TLS для удалённых подключений

Если сервер вашего приложения подключается к PostgreSQL через сеть, шифрование соединения обязательно. Совместите это с SSL-сертификатом для уровня приложения и настройте собственный TLS-стек PostgreSQL:

# Generate a self-signed certificate for internal use
openssl req -new -x509 -days 365 -nodes 
  -out /etc/postgresql/16/main/server.crt 
  -keyout /etc/postgresql/16/main/server.key

chmod 600 /etc/postgresql/16/main/server.key
chown postgres:postgres /etc/postgresql/16/main/server.{crt,key}
# postgresql.conf
ssl = on
ssl_cert_file = 'server.crt'
ssl_key_file = 'server.key'
ssl_min_protocol_version = 'TLSv1.2'

Управление доступом на основе ролей

Принцип минимальных привилегий строго применяется к ролям базы данных:

-- Create an application role with minimal permissions
CREATE ROLE app_user WITH LOGIN PASSWORD 'strong_password_here';
GRANT CONNECT ON DATABASE mydb TO app_user;
GRANT USAGE ON SCHEMA public TO app_user;
GRANT SELECT, INSERT, UPDATE, DELETE ON ALL TABLES IN SCHEMA public TO app_user;

-- Create a read-only analytics role
CREATE ROLE analytics_reader WITH LOGIN PASSWORD 'another_strong_password';
GRANT CONNECT ON DATABASE mydb TO analytics_reader;
GRANT USAGE ON SCHEMA public TO analytics_reader;
GRANT SELECT ON ALL TABLES IN SCHEMA public TO analytics_reader;

-- Never use the superuser 'postgres' role for application connections

Правила брандмауэра

# Allow PostgreSQL only from specific application server IP
ufw allow from 10.0.0.5 to any port 5432
ufw deny 5432

# Verify
ufw status verbose

Архитектура резервного копирования и восстановления

PostgreSQL предоставляет два принципиально различных механизма резервного копирования, каждый из которых подходит для разных целевых показателей восстановления.

Метод резервного копированияИнструментТип восстановленияRPORTOСценарий использования
Логическое резервное копированиеpg_dump / pg_dumpallВосстановление на уровне объектовЧасыСреднееМиграции схем, выборочное восстановление таблиц
Физическое резервное копированиеpg_basebackupПолное восстановление кластераМинуты (с WAL)БыстроеАварийное восстановление, создание резервного сервера
Непрерывное архивированиеАрхивирование WAL + pg_basebackupВосстановление на момент времениСекундыЗависит от объёма WALТребование нулевой потери данных
СнимокСнимок провайдера VPSПолное восстановление сервераНа момент создания снимкаБыстроеСтраховка перед обновлением

Логическое резервное копирование со сжатием:

# Dump a single database in custom format (supports parallel restore)
pg_dump -U postgres -Fc -Z 9 mydb > /backup/mydb_$(date +%Y%m%d).dump

# Restore
pg_restore -U postgres -d mydb_restored /backup/mydb_20240115.dump

# Dump all databases including roles and tablespaces
pg_dumpall -U postgres | gzip > /backup/full_cluster_$(date +%Y%m%d).sql.gz

Физическое резервное копирование для аварийного восстановления:

# Take a base backup (can run while PostgreSQL is live)
pg_basebackup -U replication_user -D /backup/base -Ft -z -Xs -P

# This creates base.tar.gz and pg_wal.tar.gz
# Combined with WAL archiving, enables point-in-time recovery

Автоматизация с помощью cron:

# /etc/cron.d/postgres-backup
0 2 * * * postgres pg_dump -Fc mydb > /backup/mydb_$(date +%Y%m%d_%H%M).dump
0 3 * * 0 postgres pg_dumpall | gzip > /backup/full_$(date +%Y%m%d).sql.gz

# Prune backups older than 30 days
0 4 * * * root find /backup/ -name "*.dump" -mtime +30 -delete

Масштабируемость: вертикальная, горизонтальная и масштабирование чтения

Вертикальное масштабирование

На VPS вертикальное масштабирование (добавление CPU, RAM, хранилища) как правило является операцией в реальном времени или требует лишь кратковременного перезапуска. После увеличения RAM пропорционально обновите shared_buffers, effective_cache_size и work_mem. После добавления ядер CPU увеличьте max_parallel_workers_per_gather и max_parallel_maintenance_workers.

# After upgrading from 4 to 8 CPU cores
max_parallel_workers_per_gather = 4
max_parallel_maintenance_workers = 2
max_parallel_workers = 8

Потоковая репликация для масштабирования чтения

Встроенная потоковая репликация PostgreSQL создаёт горячий резервный сервер, который может обслуживать запросы на чтение, разгружая аналитические нагрузки с основного сервера:

# On primary: create replication user
psql -U postgres -c "CREATE ROLE replicator WITH REPLICATION LOGIN PASSWORD 'rep_password';"

# In pg_hba.conf on primary
# host replication replicator 10.0.0.2/32 scram-sha-256

# In postgresql.conf on primary
# wal_level = replica
# max_wal_senders = 3
# wal_keep_size = 1GB
# On standby: initialize from primary
pg_basebackup -h 10.0.0.1 -U replicator -D /var/lib/postgresql/16/main 
  -P -Xs -R

# The -R flag creates standby.signal and populates primary_conninfo automatically

Логическая репликация для избирательной репликации

Логическая репликация позволяет реплицировать определённые таблицы на другой экземпляр PostgreSQL, что полезно для конвейеров хранилищ данных:

-- On publisher
CREATE PUBLICATION analytics_pub FOR TABLE orders, customers, products;

-- On subscriber
CREATE SUBSCRIPTION analytics_sub
  CONNECTION 'host=10.0.0.1 dbname=mydb user=replicator password=rep_password'
  PUBLICATION analytics_pub;

Для приложений, требующих выделенного сервера для основной базы данных с репликами на VPS, обрабатывающими трафик чтения, эта архитектура обеспечивает как производительность, так и экономическую эффективность.

Расширенные функции PostgreSQL, которые стоит включить

JSONB для гибридных реляционных/документных нагрузок

-- Create a table with JSONB column
CREATE TABLE events (
  id BIGSERIAL PRIMARY KEY,
  occurred_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
  payload JSONB NOT NULL
);

-- Create a GIN index for fast JSONB queries
CREATE INDEX idx_events_payload ON events USING GIN (payload);

-- Query nested JSON efficiently
SELECT * FROM events
WHERE payload @> '{"type": "purchase", "currency": "USD"}';

-- Extract and index a specific JSON key
CREATE INDEX idx_events_user_id ON events ((payload->>'user_id'));

Секционирование таблиц для больших наборов данных

-- Range partitioning by month (ideal for time-series data)
CREATE TABLE measurements (
  id BIGSERIAL,
  recorded_at TIMESTAMPTZ NOT NULL,
  sensor_id INT,
  value NUMERIC
) PARTITION BY RANGE (recorded_at);

CREATE TABLE measurements_2024_01
  PARTITION OF measurements
  FOR VALUES FROM ('2024-01-01') TO ('2024-02-01');

CREATE TABLE measurements_2024_02
  PARTITION OF measurements
  FOR VALUES FROM ('2024-02-01') TO ('2024-03-01');

-- PostgreSQL automatically routes inserts and prunes partitions in queries

PostGIS для геопространственных приложений

# Install PostGIS extension
apt install postgresql-16-postgis-3

# Enable in database
psql -U postgres -d mydb -c "CREATE EXTENSION postgis;"
-- Store and query geographic coordinates
CREATE TABLE locations (
  id SERIAL PRIMARY KEY,
  name TEXT,
  geom GEOMETRY(Point, 4326)
);

-- Find all locations within 10km of a point
SELECT name, ST_Distance(geom::geography, ST_MakePoint(-73.935242, 40.730610)::geography) AS distance_m
FROM locations
WHERE ST_DWithin(geom::geography, ST_MakePoint(-73.935242, 40.730610)::geography, 10000)
ORDER BY distance_m;

Мониторинг: стек наблюдаемости для производственного PostgreSQL

Реактивное устранение неполадок недостаточно для производственных баз данных. Проактивный стек наблюдаемости выявляет деградацию до того, как она превращается в сбой.

Встроенные представления статистики PostgreSQL

-- Identify slow queries (requires pg_stat_statements extension)
CREATE EXTENSION pg_stat_statements;

SELECT query, calls, total_exec_time / calls AS avg_ms,
       rows / calls AS avg_rows
FROM pg_stat_statements
ORDER BY avg_ms DESC
LIMIT 20;

-- Check for table bloat and vacuum status
SELECT schemaname, relname, n_dead_tup, last_autovacuum, last_autoanalyze
FROM pg_stat_user_tables
ORDER BY n_dead_tup DESC;

-- Monitor replication lag
SELECT client_addr, state, sent_lsn, write_lsn, flush_lsn, replay_lsn,
       (sent_lsn - replay_lsn) AS replication_lag_bytes
FROM pg_stat_replication;

-- Find long-running queries
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';

Стек Prometheus + postgres_exporter

# Install postgres_exporter
wget https://github.com/prometheus-community/postgres_exporter/releases/download/v0.15.0/postgres_exporter-0.15.0.linux-amd64.tar.gz
tar xzf postgres_exporter-0.15.0.linux-amd64.tar.gz
mv postgres_exporter-0.15.0.linux-amd64/postgres_exporter /usr/local/bin/

# Create a monitoring role in PostgreSQL
psql -U postgres -c "CREATE ROLE postgres_exporter WITH LOGIN PASSWORD 'monitor_pass';"
psql -U postgres -c "GRANT pg_monitor TO postgres_exporter;"

# Run the exporter
export DATA_SOURCE_NAME="postgresql://postgres_exporter:monitor_pass@localhost:5432/postgres?sslmode=disable"
postgres_exporter --web.listen-address=":9187"

Совместите postgres_exporter с дашбордом Grafana (ID дашборда 9628 с grafana.com охватывает все критические метрики PostgreSQL) и настройте оповещения для: превышения задержки репликации 30 секунд, приближения к исчерпанию идентификаторов транзакций, падения коэффициента попаданий в кеш ниже 95% и превышения количества мёртвых кортежей 10% от живых.

Матрица сценариев использования: подбор конфигурации PostgreSQL под нагрузку

НагрузкаКлючевые параметрыРасширенияСтратегия масштабирования
OLTP (электронная коммерция, SaaS)Низкий work_mem, PgBouncer, synchronous_commit=onpg_stat_statements, pgcryptoВертикальное + реплики чтения
Аналитика / OLAPВысокий work_mem, параллельные воркеры, synchronous_commit=offpg_partman, tablefuncСекционирование + колоночное хранение
Временные ряды IoTСекционирование по времени, настройка autovacuumTimescaleDB, pg_partmanОтсечение секций + сжатие
Геопространственные / ГИСПространственные индексы, effective_io_concurrencyPostGIS, pg_routingВыделенный сервер для больших наборов данных
API-бэкенд (JSON)GIN-индексы на JSONB, work_mem для агрегацийpg_trgm, uuid-osspРеплики чтения для API с преобладанием GET
Полнотекстовый поискСтолбцы tsvector, GIN-индексыpg_trgm, unaccentСканирование только по индексу, частичные индексы

Для команд, создающих API-бэкенды или веб-приложения, сочетание PostgreSQL с VPS с cPanel обеспечивает управляемую панель управления наряду с полной гибкостью базы данных. Для команд по инфраструктуре, предпочитающих управление через CLI, панели управления VPS предлагают более широкий выбор вариантов панелей.

Практический контрольный список перед развёртыванием PostgreSQL на VPS

Подбор оборудования:

  • Рассчитайте shared_buffers как 25% от общего объёма RAM
  • Убедитесь в наличии NVMe SSD-хранилища — операции записи WAL PostgreSQL чувствительны к задержкам
  • Выделите не менее 2 выделенных ядер CPU для производственных нагрузок

Базовый уровень безопасности:

  • Привяжите listen_addresses только к приватному адресу/localhost
  • Замените md5 на scram-sha-256 в pg_hba.conf
  • Включите SSL с минимальным TLS 1.2 для любых удалённых подключений
  • Создайте роли для конкретных приложений — никогда не используйте суперпользователя postgres в коде приложения
  • Настройте ufw или iptables для разрешения только известных исходных IP-адресов на порту 5432

Базовый уровень производительности:

  • Отключите прозрачные огромные страницы на уровне ОС
  • Установите vm.swappiness=1 для предотвращения выгрузки общих буферов
  • Установите и настройте PgBouncer, если количество подключений превышает 50
  • Включите pg_stat_statements с первого дня — ретроактивное профилирование запросов невозможно

Резервное копирование и восстановление:

  • Автоматизируйте pg_dump с помощью cron, ежемесячно проверяйте восстановление
  • Реализуйте архивирование WAL, если требования к RPO составляют менее 1 часа
  • Совмещайте резервные копии на уровне приложения со снимками провайдера VPS для многоуровневой защиты

Наблюдаемость:

  • Разверните postgres_exporter + Prometheus + Grafana до запуска в эксплуатацию
  • Настройте оповещения о задержке репликации, возрасте идентификатора транзакции и коэффициенте попаданий в кеш
  • Еженедельно просматривайте pg_stat_bgwriter для выявления давления на контрольные точки

FAQ

Какую версию PostgreSQL следует устанавливать на новый VPS?

Всегда устанавливайте последний стабильный мажорный релиз (PostgreSQL 16 по состоянию на 2024 год) из официального репозитория PGDG, а не версию, входящую в состав вашего дистрибутива Linux. Пакеты дистрибутивов нередко отстают на 1–2 мажорные версии и не получают бэкпортов функций от разработчиков. Используйте apt.postgresql.org или yum.postgresql.org для установки.

Сколько RAM действительно нужно VPS с PostgreSQL?

Для небольшого производственного приложения с менее чем 50 одновременными подключениями и набором данных до 50 ГБ практическим минимумом является 4 ГБ RAM. Установите shared_buffers = 1GB, work_mem = 16MB и используйте PgBouncer. Для наборов данных, превышающих доступную RAM, сосредоточьтесь на покрытии индексами и оптимизации плана запросов перед добавлением оборудования — отсутствующий индекс на таблице размером 100 ГБ не решится добавлением RAM.

Безопасно ли запускать PostgreSQL и приложение на одном VPS?

Да, для малых и средних нагрузок. Риск заключается в конкуренции за ресурсы: скачок потребления памяти в приложении может вызвать OOM-убийства, завершающие работу PostgreSQL. Смягчите это, установив oom_score_adj PostgreSQL в отрицательное значение (делая его менее вероятной жертвой) и используя cgroups для ограничения потолка памяти приложения.

В чём разница между pg_dump и pg_basebackup?

pg_dump создаёт логическую резервную копию одной базы данных — он экспортирует SQL-операторы или пользовательский бинарный формат, который можно восстанавливать выборочно (отдельные таблицы, схемы). pg_basebackup копирует весь каталог данных PostgreSQL на бинарном уровне, создавая полную резервную копию кластера, подходящую для аварийного восстановления и инициализации резервного сервера. Используйте оба: pg_dump для детального восстановления, pg_basebackup для сценариев полного восстановления.

Как безопасно обновить PostgreSQL до новой мажорной версии на VPS?

Сначала используйте pg_upgrade с флагом --check для проверки совместимости без внесения изменений. Перед продолжением создайте полную резервную копию с помощью pg_basebackup. Само обновление выполняется в автономном режиме (PostgreSQL должен быть остановлен). Для обновления мажорной версии без простоя используйте логическую репликацию: настройте новый экземпляр PostgreSQL 16 как логического подписчика основного сервера PostgreSQL 15, дождитесь его синхронизации, затем выполните скоординированное переключение с минимальным простоем.

15%

Сэкономьте 15% на всех хостинговых услугах

Проверьте свои навыки и получите скидку на любой тарифный план

Используйте код:

Skills
Начать