15%

Спести 15% на всички хостинг услуги

Тествай уменията си и получи Отстъпка за всеки хостинг план

Използвайте код:

Skills
За начало
23.10.2024
1 +1

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 за сложни натоварвания.

ФункцияPostgreSQLMySQL 8.xMariaDB 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 logBinary log
Модел на конкурентност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 за миграции на основни версии без намеса на доставчика
  • Монтиране на специализирани томове за 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 locally

PgBouncer не е опционален за приложения с повече от 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 предоставя два принципно различни механизма за архивиране, всеки подходящ за различни цели за възстановяване.

Метод за архивиранеИнструментТип възстановяванеRPORTOСлучай на употреба
Логическо архивиране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 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 секунди, приближаване на обвиване на ID на транзакцията, спадане на коефициента на попадения в кеша под 95% и брой мъртви кортежи, надвишаващ 10% от живите кортежи.

Матрица на случаите на употреба: Съответствие на конфигурацията на PostgreSQL с натоварването

НатоварванеКлючови параметриРазширенияСтратегия за мащабиране
OLTP (е-търговия, SaaS)Нисък work_mem, PgBouncer, synchronous_commit=onpg_stat_statements, pgcryptoВертикално + реплики за четене
Анализи / OLAPВисок work_mem, паралелни workers, synchronous_commit=offpg_partman, tablefuncРазделяне + колонно съхранение
Времеви редове IoTРазделяне по време, настройване на autovacuumTimescaleDB, pg_partmanИзрязване на дялове + компресия
Геопространствено / GISПространствени индекси, effective_io_concurrencyPostGIS, pg_routingDedicated 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 основния сървър, изчакайте да се синхронизира и след това извършете координирано превключване с минимално прекъсване.

15%

Спести 15% на всички хостинг услуги

Тествай уменията си и получи Отстъпка за всеки хостинг план

Използвайте код:

Skills
За начало