Πώς κάνουμε Point in Time Restore βάση δεδομένων PostgreSQL χωρίς την χρήση 3rd party tools

- Πώς κάνουμε Point in Time Restore βάση δεδομένων PostgreSQL χωρίς την χρήση 3rd party tools - 24 Αύγουστος 2026
- Πώς κάνουμε Backup βάση δεδομένων PostgreSQL χωρίς την χρήση 3rd party tools - 18 Αύγουστος 2026
- Πώς λειτουργεί η μνήμη στη PostgreSQL και ποιες παραμέτρους ρυθμίζουμε - 11 Αύγουστος 2026
Σε προηγούμενο άρθρο είχαμε δει πως παίρνουμε full και log (WAL) backup χωρίς την χρήση 3rd party tools. Σε αυτό το άρθρο θα δούμε τώρα πως μπορούμε να επαναφέρουμε την βάση δεδομένων με Point in Time Restore (PITR).
Τα βήματα
Πρώτα θα πρέπει να βρούμε που βρίσκονται τα αρχεία της postgres:
sudo -u postgres psql -c "SHOW data_directory;"
Έπειτα σταματάμε την βάση δεδομένων:
sudo systemctl stop postgresql-11
Για χάρη που παραδείγματος θα σβήσουμε την υπάρχουσα βάση δεδομένων με την παρακάτω εντολή:
sudo rm -rf /var/lib/pgsql/11/data/*
Για να επαναφέρουμε το full backup θα που το είχαμε πάρει με συμπίεση σε tar θα πρέπει να τρέξουμε την παρακάτω εντολή βάζοντας το path που βρίσκεται το backup και το path που θέλουμε να γίνει restore αντίστοιχα:
sudo tar -xzf /var/lib/postgresql/backup/full/full_20260721_094219/base.tar.gz -C /var/lib/pgsql/11/data/
Έπειτα για να μπορούμε να φτάσουμε την βάση δεδομένων σε συγκεκριμένη χρονική στίγμη θα πρέπει να φτιάξουμε το αρχείο recovery.signal, σε αυτό το αρχείο θα πρέπει να ορισούμε το path που βρίσκονται τα archive logs (WALs) και το target time δηλαδή την στιγμή που θέλουμε να φτάσουμε:
sudo vi /var/lib/pgsql/11/data/recovery.signal
Σε αυτό βάζουμε τις αντίστοιχες παραμέτρους:
restore_command = 'cp /var/lib/postgresql/archived_wal/%f "%p"'
recovery_target_time = '2026-07-21 10:00:00'
recovery_target_action = 'promote'Τέλος ξεκινάμε πάλι το service:
sudo systemctl start postgresql-11
Για να δούμε το latest log ώστε να διασφαλίσουμε οτι δεν έχουμε σφάλματα με τον χρήστη postgres κάνουμε tail με αυτή την παράμετρο:
su postgres tail -f $(ls -t /var/lib/pgsql/11/data/log/postgresql-*.log | head -n 1)
Είτε με super user από το system journal:
sudo journalctl -u postgresql-11.service -e --no-pager
Αν θέλουμε να δούμε αν έχει ολοκληρωθεί η επαναφορά, συνδεόμαστε στο τερματικό:
sudo -u postgres psql
Τρέχουμε το παρακάτω select:
SELECT pg_is_in_recovery();
Αν εμφανίσει false σημαίνει οτι έχει ολοκληρωθεί η επαναφορά απο τα WALs.

