Ce face pg_basebackup
pg_basebackup copiază toate fișierele de date ale unui server pornit, prin protocolul de replicare, fără să oprească baza de date. Rezultatul este un director (sau arhive tar) din care poți porni un server PostgreSQL identic.
Cu -X stream (implicit) copiază și fișierele WAL generate în timpul backup-ului, deci copia este consistentă. Cu -R scrie configurația de replicare (standby.signal și primary_conninfo în postgresql.auto.conf): serverul pornit din copie devine imediat replică a celui original.
Din PostgreSQL 17 există backup incremental: cu summarize_wal = on pe server, --incremental copiază doar blocurile schimbate față de backup-ul anterior, iar pg_combinebackup le reunește. Utilizatorul trebuie să aibă atributul REPLICATION și o linie replication în pg_hba.conf.
Parametri
| Parametru | Descriere |
|---|---|
-D director |
Directorul destinație; trebuie să fie gol sau să nu existe. |
-F p | t |
Format: p (plain, fișiere ca pe server) sau t (arhive tar). |
-X stream |
Copiază WAL-ul în paralel (implicit din PostgreSQL 10). |
-P |
Afișează progresul. |
-R |
Scrie configurația pentru serverul replică. |
-z |
Comprimă arhivele tar cu gzip. |
-c fast |
Cere un checkpoint imediat, ca backup-ul să înceapă repede. |
Ce returnează
Directorul sau arhivele de backup. Cod de ieșire 0 la succes.
Exemple
Exemplul 1: Pornirea unei replici (standby)
Rulat pe serverul nou, ca utilizatorul sistemului postgres, cu directorul de date gol.
pg_basebackup -h 10.0.0.5 -U replicator -D /var/lib/postgresql/18/main -X stream -c fast -P -R -v
Ieșire în terminal
pg_basebackup: initiating base backup, waiting for checkpoint to complete
pg_basebackup: checkpoint completed
pg_basebackup: write-ahead log start point: 0/5000028 on timeline 1
pg_basebackup: starting background WAL receiver
pg_basebackup: created temporary replication slot "pg_basebackup_48211"
2483201/2483201 kB (100%), 1/1 tablespace
pg_basebackup: write-ahead log end point: 0/5000138
pg_basebackup: waiting for background process to finish streaming ...
pg_basebackup: syncing data to disk ...
pg_basebackup: renaming backup_manifest.tmp to backup_manifest
pg_basebackup: base backup completed
Exemplul 2: Backup comprimat într-un director cu data
pg_basebackup -h localhost -U backup -D /backup/pg/2026-10-25 -F t -z -P
Ieșire în terminal
2483201/2483201 kB (100%), 1/1 tablespace
$ ls /backup/pg/2026-10-25
backup_manifest base.tar.gz pg_wal.tar.gz
Exemplul 3: Director destinație care nu este gol
pg_basebackup -h 10.0.0.5 -U replicator -D /var/lib/postgresql/18/main -R
Ieșire în terminal
pg_basebackup: error: directory "/var/lib/postgresql/18/main" exists but is not empty
Greșeli frecvente
- Consideri copia făcută de
pg_basebackupsuficientă pentru recuperarea la un anumit moment (PITR). Pentru asta ai nevoie și de arhivarea continuă a WAL-ului (archive_commandsau un instrument ca pgBackRest). - Uiți linia pentru replicare din
pg_hba.conf(host replication replicator 10.0.0.6/32 scram-sha-256) și primeștino pg_hba.conf entry for replication connection. - Nu testezi restaurarea. Un backup este util doar dacă ai pornit cel puțin o dată un server din el.
Comenzi înrudite
CREATE PUBLICATION (replicare logică): Pe serverul sursă, alege ce tabele se trimit prin replicare logică. Serverele abonate primesc apoi fiecare INSERT, UPDATE și DELETE.