How does pg_basebackup manage to create a snapshot of the filesystem?

Started by Dennis Jacobfeuerbornabout 6 years ago3 messagesgeneral
Jump to latest
#1Dennis Jacobfeuerborn
dennisml@conversis.de

Hi,
I'm currently trying to understand how backups work. In the
documentation in section "25.2. File System Level Backup" it says that
filesystem level backups can only be made when the database if offline
yet pg_basebackup seems to do just that but works while the database is
online. Am I misunderstanding something here or does pg_basebackup use
some particular features of Postgres to accomplish this?

Regards,
Dennis

#2Christophe Pettus
xof@thebuild.com
In reply to: Dennis Jacobfeuerborn (#1)
Re: How does pg_basebackup manage to create a snapshot of the filesystem?

On Mar 19, 2020, at 15:19, Dennis Jacobfeuerborn <dennisml@conversis.de> wrote:
I'm currently trying to understand how backups work. In the
documentation in section "25.2. File System Level Backup" it says that
filesystem level backups can only be made when the database if offline
yet pg_basebackup seems to do just that but works while the database is
online. Am I misunderstanding something here or does pg_basebackup use
some particular features of Postgres to accomplish this?

pg_basebackup does, indeed, take an inconsistent copy of the file system while it is running; what allows it to bring the database back up to consistency is the write-ahead log segments that are created while pg_basebackup is running. That's why it is important to have all of the WAL segments created during the run (which is what --wal-method=stream provides you).
--
-- Christophe Pettus
xof@thebuild.com

#3Stephen Frost
sfrost@snowman.net
In reply to: Dennis Jacobfeuerborn (#1)
Re: How does pg_basebackup manage to create a snapshot of the filesystem?

Greetings,

* Dennis Jacobfeuerborn (dennisml@conversis.de) wrote:

I'm currently trying to understand how backups work. In the
documentation in section "25.2. File System Level Backup" it says that
filesystem level backups can only be made when the database if offline
yet pg_basebackup seems to do just that but works while the database is
online. Am I misunderstanding something here or does pg_basebackup use
some particular features of Postgres to accomplish this?

A simple tar-based backup as discussed in 25.2 can only be done with the
database off-line, but if you're wondering what pg_basebackup is doing
under the covers then you should be reading through 25.3, which talks
about the PostgreSQL WAL, how a backup can be taken in an online manner
provided you retain the WAL that was created during the backup, how to
restore a backup taken in that manner, etc.

All that said, I don't recommend rolling your own backup solution for
PG. There's a number of good ones out there, starting with
pg_basebackup if you really just need something simple.

Thanks,

Stephen