On Fri, Mar 4, 2022 at 7:50 PM RKN Sai Krishna
<rknsaiforpostg...@gmail.com> wrote:
>
> Hi,
>
> While using pg_rewind, I found that it is a bit difficult to use pg_rewind as 
> it seems to copy even the configuration files and also remove some of the 
> files created on the old primary which may not be present on the new primary. 
> Similarly it copies files under the data directory of the new primary which 
> may not be needed or which possibly could be junk files.

It's possible that the postgres vendors can have their own
files/directories in the data directory which they may not want to be
overwritten by the pg_rewind. Also, if the source server is
compromised (somebody put in some junk file) for whatever reasons,
nobody wants those files to pass over to the target server.

> I would propose to have a couple of new command line arguments to pg_rewind. 
> One, a comma separated list of files which should be preserved on the old 
> primary, in other words which shouldn't be overwritten from the new primary.

+1 from my end to have a new pg_rewind option such as --skip-file-list
or --skip-list which is basically a list of files that pg_rewind will
not overwrite in the target directory.

> Second, a comma separated list of files which should be excluded while 
> copying files from the new primary onto the old primary.

I'm not sure how it is different from the above option
--skip-file-list or --skip-list?

Another idea I can think of is to be able to tell pg_rewind "don't
copy/bring in any non-postgres files/directories from source server to
target server". This requires pg_rewind to know what are
postgres/non-postgres files/directories. Probably, we could define a
static list of what a postgres files/directories constitute, but this
creates tight-coupling with the core, say a new directory or
configuration file gets added to the core, this static list in
pg_rewind needs to be updated. Having said that initdb.c already has
this sort of list [1], we need similar kind of structures and probably
another structure for files (postgresql.auto.conf, postgresql.conf,
pg_ident.conf, pg_hba.conf, postmaster.opts, backup_label,
standby.signal, recovery.signal etc.).

Above option seems an overkill, but --skip-file-list or --skip-list is
definitely an improvement IMO.

[1] static const char *const subdirs[] = {
    "global",
    "pg_wal/archive_status",
    "pg_commit_ts",
    "pg_dynshmem",

Regards,
Bharath Rupireddy.


Reply via email to