Duplicate history file?

From: Kyotaro Horiguchi <horikyota(dot)ntt(at)gmail(dot)com>
To: pgsql-hackers(at)lists(dot)postgresql(dot)org
Cc: tatsuro(dot)yamada(dot)tf(at)nttcom(dot)co(dot)jp
Subject: Duplicate history file?
Date: 2021-05-31 07:58:25
Message-ID: 20210531.165825.921389284096975508.horikyota.ntt@gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-hackers

So, I started a thread for this topic diverged from the following
thread.

https://www.postgresql.org/message-id/4698027d-5c0d-098f-9a8e-8cf09e36a555@nttcom.co.jp_1

At Mon, 31 May 2021 11:52:05 +0900, Tatsuro Yamada <tatsuro(dot)yamada(dot)tf(at)nttcom(dot)co(dot)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

In response to

Responses

Browse pgsql-hackers by date

  From Date Subject
Next Message Emre Hasegeli 2021-05-31 08:03:05 postgres_fdw: Handle boolean comparison predicates
Previous Message Andrey Borodin 2021-05-31 07:33:44 Re: Different compression methods for FPI