Hero Image

PostgreSQL Backup and Restore on OpenBSD 7.5

PostgreSQL Backup and Restore on OpenBSD 7.5

Logical backup with pg_dump

Single database

sudo -u postgres pg_dump -Fc appdb > /backups/appdb_$(date +%F).dump

All databases

sudo -u postgres pg_dumpall > /backups/all_$(date +%F).sql

Restore a single database:

sudo -u postgres pg_restore -d appdb /backups/appdb_2026-05-07.dump

Physical backup with pg_basebackup

sudo -u postgres pg_basebackup -D /backups/base_$(date +%F) -Ft -z -P

Automated daily backup script

Create /usr/local/bin/pg_daily_backup.sh:

#!/bin/bash
BACKUP_DIR="/backups/postgres"
RETENTION_DAYS=7
mkdir -p "$BACKUP_DIR"
sudo -u postgres pg_dumpall | gzip > "$BACKUP_DIR/all_$(date +%F_%H%M).sql.gz"
find "$BACKUP_DIR" -name '*.sql.gz' -mtime +$RETENTION_DAYS -delete
chmod +x /usr/local/bin/pg_daily_backup.sh

Add a cron job (daily at 02:00):

0 2 * * * root /usr/local/bin/pg_daily_backup.sh

Point-in-Time Recovery (PITR)

Enable WAL archiving in postgresql.conf:

archive_mode = on
archive_command = 'test ! -f /wal_archive/%f && cp %p /wal_archive/%f'
restore_command = 'cp /wal_archive/%f %p'

Restore to a specific time:

# recovery.conf (PostgreSQL < 12) or postgresql.conf (>= 12):
recovery_target_time = '2026-05-07 03:00:00'