15%

Збережіть 15% на всі хостинг-послуги

Перевірте свої навички і отримайте Знижку на будь-який план хостингу

Використовуй код:

Skills
Почати
23.10.2024
1 +1

PostgreSQL на VPS: Архітектура, Налаштування Продуктивності та Посібник з Розгортання

PostgreSQL — це вдосконалена об’єктно-реляційна система управління базами даних (ORDBMS) з відкритим вихідним кодом, яка підтримує запити SQL та JSON, ACID-сумісні транзакції та розширювані типи даних. При розгортанні на Віртуальному Приватному Сервері вона отримує виділені обчислювальні ресурси, повний доступ до конфігурації на рівні ядра та мережеву ізоляцію — можливості, які спільний хостинг принципово не може забезпечити.

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

Чому PostgreSQL перевершує інші варіанти RDBMS з відкритим вихідним кодом

Перш ніж розглядати переваги, специфічні для 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 тощо)НіНі

Модель Multi-Version Concurrency Control (MVCC) PostgreSQL заслуговує на особливу увагу: читачі ніколи не блокують записувачів, а записувачі ніколи не блокують читачів. Це архітектурно перевершує змішані навантаження OLTP/OLAP, де тривалі аналітичні запити інакше блокували б транзакційні таблиці.

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

Тарифний план VPS Хостинг надає гарантовані CPU-ядра, RAM та NVMe SSD-сховище за частку вартості фізичного обладнання. Економічна логіка проста: вимоги PostgreSQL до пам’яті масштабуються з max_connections та work_mem, а не з розміром сервера. Правильно налаштований VPS з 4 GB RAM, що обслуговує 50 одночасних підключень, перевершить екземпляр з 8 GB 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 між індексами та heap-файлами

Критичне налаштування ядра для 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 MB RAM початку 2000-х років. На сучасному VPS з 4–16 GB 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 GB 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 MB RAM. При 200 підключеннях це 1–2 GB, що споживаються неактивними процесами. 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Відсікання партицій + стиснення
Геопросторові / GISПросторові індекси, 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 GB, 4 GB RAM є практичним мінімумом. Встановіть shared_buffers = 1GB, work_mem = 16MB та використовуйте PgBouncer. Для наборів даних, що перевищують доступну RAM, зосередьтеся на покритті індексами та оптимізації плану запитів перед додаванням апаратного забезпечення — відсутній індекс на таблиці 100 GB не буде вирішено додаванням 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
Почати