how to identify the timeline of specified recovery_target_time when do multiple PITR

From: magodo <wztdyl(at)sina(dot)com>
To: pgsql-general(at)postgresql(dot)org
Subject: how to identify the timeline of specified recovery_target_time when do multiple PITR
Date: 2018-10-02 05:46:27
Message-ID: 29dd7b5cf905ee53026f96b78a505f1b76b6031b.camel@sina.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-general


I read the document about recovery configuration, it says:

recovery_target_timeline (string)

...

Other than that you only need to set this parameter in complex re-
recovery situations, where you need to return to a state that itself
was reached after a point-in-time recovery. See Section 25.3.5 for
discussion.

...

Andin section 25.3.5 it says:

...

If you wish to recover into some child timeline (that is, you want
to return to some state that was itself generated after a recovery
attempt), you need to specify the target timeline ID in
recovery.conf.

...

Therefore, suppose I am going to recover to a point of some child
timeline, to identify the point, I have to specify either
recovery_target_name or recovery_target_time, and also specify the
recovery_target_timeline.

It is more like a tuple like (recovery_target_time,
recovery_target_timeline), that specify a real point among all history
branches. Am I understand this correctly?

If yes, what I want to ask is that, though the timeline is increasing
between different recovery, but each timestamp corresponds to a
timeline ID, one by one. So if I get a recovery_target_time, why should
I still specify the recovery_target_timeline?

Suppose following illustration:

A B
BASE-----+-----+------o1 (recover to A) 1
| | C
+.....|.......----+---o2 (regret, recover to B) 2
| |
+...........|..------o3 (regret again, recover to C) 3
|
+........---- 4

Legend:

BASE: basebackup
A-Z: recovery point
---: active wal histroy (continuous among branches)
...: inactive wal history
oN: point to do PITR

If am at "o3", and I want to recover to "C", if I don't specify
timeline ID, then i will ends up with state as "o1". Only if I specify
timeline ID as "2", then I can get the state as I expect (as
illustrated).

Why not just recover along the history from timeline 1 to the timeline
specified by recovery target? The only reason I can imagine is that
there is a chance that there are two active timeline at same point, but
what is the use case of that(if it exists)?

Responses

Browse pgsql-general by date

  From Date Subject
Next Message Dean Rasheed 2018-10-02 08:28:15 Re: Postgres trigger side-effect is occurring out of order with row-level security select policy
Previous Message Harry B 2018-10-02 04:41:20 Postgres 11, partitioning with a custom hash function