Greetings, * Chapman Flack (c...@anastigmatix.net) wrote: > On 03/08/22 17:12, Nathan Bossart wrote: > > I spent some time trying to come up with a workable script to replace the > > existing one. I think the main problem is that you need to write out both > > the backup label file and the tablespace map file, but I didn't find an > > easy way to write the different output columns of pg_backup_stop() to > > separate files via psql.
Let's not confuse ourselves here- the existing script *doesn't* work in any reasonable way when we're talking about everything that needs to be done to perform a backup. That a lot of people are using it because it's in the documentation is an actively bad thing. The same goes for the archive command example. > Something like this might work: > > SELECT * FROM pg_backup_stop(true) \gset > > \out /tmp/backup_label \qecho :labelfile > \out /tmp/tablespace_map \qecho :spcmapfile > \out > \! ... tar command adding /tmp/{backup_label,tablespace_map} to the tarball ... this doesn't do what's needed either. We could try to write down some minimum set of things that are needed for a backup tool to do but it's not something that a 3 line script is going to cover. Indeed, it's a lot more like pg_basebackup and if we want to give folks a script to use, it should be "run pg_basebackup". > I notice the \qecho adds a final newline (and so if :spcmapfile is empty, > a file containing a single newline is made). In a quick test with a bogus > restore_command, I did not see any error messages specific to the format > of the backup_label or tablespace_map files, so maybe the final newline > isn't a problem. > > Assuming the newline isn't a problem, that might be simple enough to > use in an example, and maybe it's not a bad thing that it highlights a few > psql capabilities the reader might not have stumbled on before. Or, maybe > it is just too confusing to bother. It's more than just too confusing, it's actively bad because people will actually use it and then end up with backups that don't work. > While agreeing that pg_basebackup is the production-ready thing that > does it all for you (with tests for likely errors and so on), I think > there is also some value in a dead-simple example that concretely > shows you what "it" is, what the basic steps are that happen beneath > pg_basebackup's chrome. Documenting everything that pg_basebackup does to make sure that the backup is viable might be something to work on if someone is really excited about this, but it's not 'dead-simple' and it's darn close to the bare minimum, something that none of these simple scripts will come anywhere close to being and instead they'll be far less than the minimum. > If the added newline is a problem, I haven't thought of a way to exclude > it that doesn't take the example out of the realm of dead-simple. I disagree that there's really a way to provide 'dead-simple' backups with what's built into core without using pg_basebackup. If we want a 'dead-simple' solution in core then we'd need to write an appropriate backup tool that does all the basic things and include and maintain that. Writing a shell script isn't enough and we shouldn't encourage our users to do exactly that by having it in our documentation because then they'll think it's enough. Thanks, Stephen
signature.asc
Description: PGP signature