w3resource

Comprehensive Guide to Backing Up PostgreSQL Databases


Comprehensive Guide to PostgreSQL Backup

Backing up a PostgreSQL database ensures the safety and recoverability of your data in case of accidental loss or corruption. PostgreSQL offers various methods to create backups, including SQL dumps and file-based backups. This guide covers these methods with practical examples and steps.

Methods to Back Up PostgreSQL Databases

1. SQL Dump Using pg_dump

The pg_dump utility creates logical backups by generating SQL scripts that can recreate the database. This method is flexible and commonly used.

Syntax:

pg_dump -U [username] -h [host] -p [port] -d [database_name] -f [file_name]

Parameters:

  • -U: PostgreSQL username.
  • -h: Host (default is localhost).
  • -p: Port (default is 5432).
  • -d: Name of the database to back up.
  • -f: Output file name.

Example: Create a backup of the sampledb database

Code:

# Create a backup of the sampledb database
pg_dump -U postgres -h localhost -p 5432 -d sampledb -f sampledb_backup.sql

Explanation:

This command creates a file sampledb_backup.sql containing SQL commands to recreate the database.

2. Full Database Cluster Backup Using pg_basebackup

The pg_basebackup utility creates physical backups of the entire database cluster, including configuration files.

Syntax:

pg_basebackup -U [replication_user] -h [host] -D [backup_directory] -Fp -X stream

Parameters:

  • -U: PostgreSQL user with replication privileges.
  • -D: Directory to store the backup.
  • -Fp: Plain format.
  • -X: Includes transaction logs for consistency.

Example: Create a full cluster backup

Code:

# Create a full cluster backup
pg_basebackup -U postgres -h localhost -D /backups/cluster_backup -Fp -X stream

Explanation:

This creates a physical copy of the database cluster in the /backups/cluster_backup directory.

3. Automated Backups with Cron Jobs

You can automate backups using cron jobs on Unix-based systems.

Example: Daily backup

Code:

# Edit the crontab file
crontab -e

# Add the following line to back up daily at 2 AM
0 2 * * * pg_dump -U postgres -h localhost -d sampledb -f /backups/sampledb_$(date +\%Y-\%m-\%d).sql

Explanation:

This schedules a daily backup of the sampledb database with a timestamped file name.

Restoring PostgreSQL Backups

1. Restore SQL Dump Using psql

Syntax:

psql -U [username] -d [database_name] -f [file_name]

Example: Restore the sampledb database

Code:

# Restore the sampledb database
psql -U postgres -d sampledb -f sampledb_backup.sql

Explanation:

  • This restores the SQL dump to the specified database.

2. Restore Physical Backup

To restore a physical backup, stop the PostgreSQL server, replace the data directory with the backup, and restart the server.

Steps:

a. Stop PostgreSQL:

sudo systemctl stop postgresql

b. Replace Data Directory:

rm -rf /var/lib/postgresql/data
cp -r /backups/cluster_backup /var/lib/postgresql/data

c. Restart PostgreSQL:

sudo systemctl start postgresql

Best Practices for PostgreSQL Backup

    1. Regular Backups: Schedule frequent backups to minimize data loss.

    2. Test Restorations: Periodically test restoring backups to ensure reliability.

    3. Store Offsite Copies: Save backups in multiple locations, including cloud storage.

    4. Use Encryption: Encrypt sensitive backups for security.

    5. Monitor Backup Logs: Check logs to verify successful backup execution.

All PostgreSQL Questions, Answers, and Code Snippets Collection.



Become a Patron!

Follow us on Facebook and Twitter for latest update.

It will be nice if you may share this link in any developer community or anywhere else, from where other developers may find this content. Thanks.

https://w3resource.com/PostgreSQL/snippets/how-to-perform-postgresql-backup.php