PostgreSQL на VPS: Архитектура, Оптимизация на производителността и Ръководство за внедряване
PostgreSQL е усъвършенствана система за управление на обектно-релационни бази данни (ORDBMS) с отворен код, която поддържа заявки чрез SQL и JSON, транзакции, съответстващи на ACID, и разширяеми типове данни. Когато се разгърне на Virtual Private Server, тя получава достъп до специализирани изчислителни ресурси, пълен достъп до конфигурацията на ниво ядро и мрежова изолация — възможности, които споделеният хостинг принципно не може да осигури.
За производствени натоварвания тази комбинация е от непосредствено значение: неправилно конфигурирана стойност shared_buffers при споделен хостинг не може да бъде коригирана, неконтролирана заявка от инстанция на съсед може да изчерпи вашия I/O, и не можете да инсталирате разширения като PostGIS или pg_partman без root достъп. VPS елиминира и трите ограничения едновременно.
Защо PostgreSQL превъзхожда другите опции за RDBMS с отворен код
Преди да разгледаме предимствата, специфични за VPS, си струва да разберем какво прави PostgreSQL предпочитания двигател пред MySQL/MariaDB за сложни натоварвания.
| Функция | PostgreSQL | MySQL 8.x | MariaDB 10.x |
|---|---|---|---|
| ACID съответствие | Пълно, включително DDL | Пълно | Пълно |
| JSON/JSONB индексиране | Нативен JSONB с GIN индекси | JSON (без двоично съхранение) | JSON (без двоично съхранение) |
| Геопространствена поддръжка | PostGIS (индустриален стандарт) | Ограничени пространствени типове | Ограничени пространствени типове |
| Пълнотекстово търсене | Вградено, конфигурируемо | Основен FULLTEXT индекс | Основен FULLTEXT индекс |
| Разделяне на таблици | Декларативно, range/list/hash | Поддържа се разделяне | Поддържа се разделяне |
| Паралелно изпълнение на заявки | Да (конфигурируеми workers) | Ограничено | Ограничено |
| Персонализирани типове данни | Да (CREATE TYPE) | Не | Не |
| Съхранени процедури (PL/pgSQL) | Пълен процедурен език | Основен | Основен |
| Write-ahead logging (WAL) | Конфигурируемо, поточна репликация | Binary log | Binary log |
| Модел на конкурентност | MVCC (без заключвания при четене) | MVCC | MVCC |
| Логическа репликация | Да (публикация/абонамент) | Да | Да |
| Обвивки за външни данни | Да (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за миграции на основни версии без намеса на доставчика - Монтиране на специализирани томове за tablespace на отделни блокови устройства за 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 locallyPgBouncer не е опционален за приложения с повече от 50 едновременни потребители. Всеки backend процес на PostgreSQL консумира приблизително 5–10 MB RAM. При 200 връзки това са 1–2 GB, консумирани от неактивни процеси. PgBouncer в режим на обединяване на транзакции мултиплексира стотици приложни връзки към малък пул от действителни PostgreSQL backends.
# 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 предоставя два принципно различни механизма за архивиране, всеки подходящ за различни цели за възстановяване.
| Метод за архивиране | Инструмент | Тип възстановяване | RPO | RTO | Случай на употреба |
|---|---|---|---|---|---|
| Логическо архивиране | pg_dump / pg_dumpall | Възстановяване на ниво обект | Часове | Средно | Миграции на схеми, селективно възстановяване на таблици |
| Физическо архивиране | pg_basebackup | Пълно възстановяване на клъстера | Минути (с WAL) | Бързо | Възстановяване при бедствие, създаване на standby |
| Непрекъснато архивиране | 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 създава горещ standby, който може да обслужва заявки за четене, разтоварвайки аналитичните натоварвания от основния сървър:
# 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;За приложения, изискващи Dedicated Server за основната база данни с 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 queriesPostGIS за геопространствени приложения
# 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 секунди, приближаване на обвиване на ID на транзакцията, спадане на коефициента на попадения в кеша под 95% и брой мъртви кортежи, надвишаващ 10% от живите кортежи.
Матрица на случаите на употреба: Съответствие на конфигурацията на PostgreSQL с натоварването
| Натоварване | Ключови параметри | Разширения | Стратегия за мащабиране |
|---|---|---|---|
| OLTP (е-търговия, SaaS) | Нисък work_mem, PgBouncer, synchronous_commit=on | pg_stat_statements, pgcrypto | Вертикално + реплики за четене |
| Анализи / OLAP | Висок work_mem, паралелни workers, synchronous_commit=off | pg_partman, tablefunc | Разделяне + колонно съхранение |
| Времеви редове IoT | Разделяне по време, настройване на autovacuum | TimescaleDB, pg_partman | Изрязване на дялове + компресия |
| Геопространствено / GIS | Пространствени индекси, effective_io_concurrency | PostGIS, pg_routing | Dedicated server за големи набори от данни |
| API backend (JSON) | GIN индекси върху JSONB, work_mem за агрегации | pg_trgm, uuid-ossp | Реплики за четене за API с преобладаващи GET заявки |
| Пълнотекстово търсене | Колони tsvector, GIN индекси | pg_trgm, unaccent | Сканирания само на индекси, частични индекси |
За екипи, изграждащи API backends или уеб приложения, комбинирането на PostgreSQL с VPS с cPanel осигурява управляван контролен панел заедно с пълна гъвкавост на базата данни. За инфраструктурни екипи, предпочитащи управление чрез CLI, VPS Control Panels предлага по-широк избор от опции за панели.
Практически контролен списък преди разгръщане на 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
Базова линия на производителността:
- Деактивирайте transparent huge pages на ниво ОС
- Задайте
vm.swappiness=1за предотвратяване на пейджинг на споделените буфери - Инсталирайте и конфигурирайте PgBouncer, ако броят на връзките надвишава 50
- Активирайте
pg_stat_statementsот самото начало — ретроактивното профилиране на заявки е невъзможно
Архивиране и възстановяване:
- Автоматизирайте
pg_dumpс cron, тествайте възстановяванията месечно - Внедрете WAL архивиране, ако изискванията за RPO са под 1 час
- Комбинирайте архивирането на ниво приложение със снимки от VPS доставчика за многопластова защита
Наблюдаемост:
- Разгърнете
postgres_exporter+ Prometheus + Grafana преди пускане в експлоатация - Задайте сигнали за изоставане на репликацията, възраст на ID на транзакцията и коефициент на попадения в кеша
- Преглеждайте
pg_stat_bgwriterседмично за откриване на натиск при контролни точки
ЧЗВ
Коя версия на PostgreSQL трябва да инсталирам на нов VPS?
Винаги инсталирайте последното стабилно основно издание (PostgreSQL 16 към 2024 г.) от официалното PGDG хранилище, а не версията, включена в дистрибуцията на Linux. Пакетите на дистрибуциите често изостават с 1–2 основни версии и не получават обратно пренасяне на функции от upstream. Използвайте 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 на двоично ниво, създавайки пълно архивиране на клъстера, подходящо за възстановяване при бедствие и инициализация на standby сървър. Използвайте и двете: pg_dump за детайлни възстановявания, pg_basebackup за сценарии на пълно възстановяване.
Как да надградя безопасно PostgreSQL до нова основна версия на VPS?
Използвайте pg_upgrade с флага --check първо, за да валидирате съвместимостта, без да правите промени. Направете пълно pg_basebackup преди да продължите. Самото надграждане се извършва офлайн (PostgreSQL трябва да бъде спрян). За надграждания на основни версии без прекъсване, използвайте логическа репликация: настройте нова PostgreSQL 16 инстанция като логически абонат на PostgreSQL 15 основния сървър, изчакайте да се синхронизира и след това извършете координирано превключване с минимално прекъсване.
