postgresql backup
logical backup
Logical backup extract metadata(with SQL) from postgresql.
Its advantages includes human readable text and better transplantability.
pg_dump
Dump objects or single database
into file.
pg_dump [connection-option…] [option…] [dbname]
plain format
Just in one file, long if database becomes big.
backup:
pg_dump -U postgres -h 127.0.0.1 -t test > test.sql
restore:psql -U postgres -h 127.0.0.1 -f test.sql
non-plain format
Directory organized, data and table separated, cleaner and easier to manage.
Might use more storage. Transplantability not as good as plain format.
backup:
pg_dump -U postgres -h 127.0.0.1 --format=tar -t test > test.tar
restore:pg_restore -U postgres -h 127.0.0.1 --dbname=postgres test.tar
pg_dumpall
Dump whole postgresql cluster
into file.
This command actually calling pg_dump
and dump each database in this cluster one by one.
backup:
pg_dump -U postgres -h 127.0.0.1> pg.sql
restore:psql -U postgres -h 127.0.0.1 -f pg.sql
physical backup
Physical backup somehow copies files that related with database directly.
Only physical backup could use PITR
technique. If you need to use PITR
, please enable WAL
and archive log
. For this part, please refer to my post;
pg_basebackup
This command will copy files under $PGDATA
as well as tablespace files that outside this folder.
Beware this not includes archived WAL
files. You need to backup them up manually.
backup:
pg_basebackup -U postgres -h 127.0.0.1 --format=tar -xz -P -D backup
restore: Just copy and unzip required tar files to specific path.
You can also use system commands like cp
to manually copy and compress files. But if you do so, you need to stop postgresql cluster first to ensure data consistency in database.