I'd like to use WAL archiving for incremental backup of my database. But I have 2 databases on my server, and I can't afford the disc space for backup of both of them. So I only want to backup one of them. I didn't find anything about multiple databases in PostgreSQL documentation or anywhere else. Or I didn't find anything about specifying the database name for WAL backup.
It will be appreciated if someone can help me with this.
PostgreSQL – How to manage WAL archiving for different databases on a server
backuppostgresqlpostgresql-9.1
Related Question
- PostgreSQL WAL Archiving: Does having archive_mode set to ‘on’ without copying logs cause performance issues
- PostgreSQL – Created User Can Access All Databases Without Grants
- PostgreSQL Backup – Simplest Filesystem Backup of Postgres Database
- PostgreSQL – Can Databases Be Attached/Detached on the Fly?
- PostgreSQL – Incremental Backup and Base Backup Creation Frequency
- PostgreSQL Incremental Backup with wal-e – How to Guide
- PostgreSQL 11.5 – Location of recovery.conf File
Best Answer
You can't split WAL archiving out so one database goes in one WAL archive stream and other DBs go in another WAL archive stream. A single write-ahead log is shared by all databases in a PostgreSQL server ("cluster" in PostgreSQL parlance). All databases managed by a postmaster have the same WAL. This is a sometimes unfortunate limitation of the current replication/PITR/archiving design and is true for the in-development-at-time-of-writing 9.3 and all and prior releases.
If you want to separate the WAL archiving, you have to separate the databases into different clusters. You can do this by running more than one instance of PostgreSQL on a server; they simply have to have different data directories and different listening ports. Some packagings of PostgreSQL provide built-in tools to do this, like the
pg_wrapper
tool used on Debian and Ubuntu, which haspg_createcluster
. Alternately, you can always just useinitdb
to create a cluster andpg_ctl
to start the cluster after editing the new cluster'spostgresql.conf
to set an appropriate port.Tools like pgbouncer may be used, if desired, to multiplex the multiple clusters transparently, so pgbouncer listens on port 5432 (the default Pg port) and decides which server to send the connection to based on which database it asks for. Generally it's easier to just specify a port in the connection setup of the applications that use each database, though.
On PostgreSQL 9.2 and below you must allocate each server an exclusive, non-overlapping shared memory region for its
shared_buffers
. One server cannot make use of the other server'sshared_buffers
space when the other server is not busy. That means you are wasting some system resources. PostgreSQL 9.3 improves this by allocatingshared_buffers
out of anonymous memory, giving the OS more freedom about how it manages it.If you don't want to run multiple clusters, you can use alternative replication or backup solutions based on out-of-tree tools like Slony-I, Bucardo, etc to manage your data replication and archival.