So, I started a thread for this topic diverged from the following thread. https://www.postgresql.org/message-id/4698027d-5c0d-098f-9a8e-8cf09e36a...@nttcom.co.jp_1
At Mon, 31 May 2021 11:52:05 +0900, Tatsuro Yamada <tatsuro.yamada...@nttcom.co.jp> wrote in > Since the above behavior is different from the behavior of the > test command in the following example in postgresql.conf, I think > we should write a note about this example. > > # e.g. 'test ! -f /mnt/server/archivedir/%f && cp %p > # /mnt/server/archivedir/%f' > > Let me describe the problem we faced. > - When archive_mode=always, archive_command is (sometimes) executed > in a situation where the history file already exists on the standby > side. > > - In this case, if "test ! -f" is written in the archive_command of > postgresql.conf on the standby side, the command will keep failing. > > Note that this problem does not occur when archive_mode=on. > > So, what should we do for the user? I think we should put some notes > in postgresql.conf or in the documentation. For example, something > like this: I'm not sure about the exact configuration you have in mind, but that would happen on the cascaded standby in the case where the upstream promotes. In this case, the history file for the new timeline is archived twice. walreceiver triggers archiving of the new history file at the time of the promotion, then startup does the same when it restores the file from archive. Is it what you complained about? The same workaround using the alternative archive script works for the case. We could check pg_wal before fetching archive, however, archiving is not controlled so strictly that duplicate archiving never happens and I think we choose possible duplicate archiving than having holes in archive. (so we suggest the "test ! -f" script) > ==== > Note: If you use archive_mode=always, the archive_command on the > standby side should not be used "test ! -f". > ==== It could be one workaround. However, I would suggest not to overwrite existing files (with a file with different content) to protect archive from corruption. We might need to write that in the documentation... regards. -- Kyotaro Horiguchi NTT Open Source Software Center