PostgreSQL Incremental Backup and WAL Recovery
PostgreSQL Incremental Backup and WAL Recovery
Incremental backup
Ubuntu under Hyper-V
using pg_basebackup and WAL archive replay
https://www.linkedin.com/in/mariyanclement/
1. PostgreSQL 17 Installation
sudo sh -c 'echo "deb http://apt.postgresql.org/pub/repos/apt $(lsb_release -cs)-pgdg main" >
/etc/apt/sources.list.d/pgdg.list'
Verify installation:
psql --version # PostgreSQL 17.x
2. Post-Installation Setup (New Ubuntu VM)
Ensure PostgreSQL executables are accessible:
nano ~/.bashrc
Then:
sudo mkdir -p /var/lib/postgresql/17/archive
sudo chown postgres:postgres /var/lib/postgresql/17/archive
sudo chmod 700 /var/lib/postgresql/17/archive
Restart PostgreSQL:
/usr/lib/postgresql/17/bin/pg_ctl -D /var/lib/postgresql/17/main restart
5. Create Sample Demo Data
As postgres user:
psql
\c demodb
Then run:
Verify data:
SELECT * FROM evidence ORDER BY id;
8. Restore and Replay WAL
Stop PostgreSQL:
/usr/lib/postgresql/17/bin/pg_ctl -D /var/lib/postgresql/17/main stop
Rename original:
sudo mv /var/lib/postgresql/17/main /var/lib/postgresql/17/main.bak
Create recovery.signal:
sudo -u postgres touch /var/lib/postgresql/17/main/recovery.signal
Start PostgreSQL:
/usr/lib/postgresql/17/bin/pg_ctl -D /var/lib/postgresql/17/main start
9. Verify WAL Recovery
psql -d demodb
SELECT * FROM evidence ORDER BY id;
This is the primary configuration directory, often symlinked or referenced during upgrades and automation.
2. /var/lib/postgresql/17/main/
Purpose: This is the PostgreSQL data directory where all database files are stored.
Includes:
Data for system and user databases.
WAL files, base/, pg_wal/, pg_stat/, etc.
Consider this the heart of your PostgreSQL instance – backing up this is essential!
3. /usr/lib/postgresql/17/bin/
Purpose: Contains PostgreSQL server binaries.
Examples:
postgres – the actual server binary.
initdb, pg_ctl, pg_basebackup, pg_dump, psql, etc.
These are versioned binaries – useful if you manage multiple PostgreSQL versions side-by-side.
4. /usr/lib/postgresql/17/lib/
Purpose: Contains shared libraries (.so files) used by PostgreSQL 17 server.
Examples:
Internal plugins like adminpack, pg_stat_statements, or custom C extensions.
5. /lib/postgresql/17/lib/
Purpose: Similar to /usr/lib/postgresql/17/lib/, it may contain additional or system-level shared libraries for PostgreSQL.
Note: On some systems, this may be a symlink or remain unused depending on packaging.
6. /lib/postgresql/17/bin/
Unusual/Optional: Normally not used by default packaging.
Might appear:
Due to manual builds or path misconfigurations.
If a third-party package placed binaries here by mistake.
7. /var/log/postgresql/
Default log file directory (if enabled).
Controlled via postgresql.conf → log_directory.
8. /etc/init.d/postgresql or /lib/systemd/system/postgresql.service
Startup scripts or systemd unit files to manage PostgreSQL as a service.
9. /usr/share/postgresql/17/
Contains default configuration templates and extension SQL files (e.g., for CREATE EXTENSION).