Michael Paquier f61e1dd2ce Allow pg_receivewal to stream from a slot's restart LSN
Prior to this patch, when running pg_receivewal, the streaming start
point would be the current location of the archives if anything is
found in the local directory where WAL segments are written, and
pg_receivewal would fall back to the current WAL flush location if there
are no archives, as of the result of an IDENTIFY_SYSTEM command.

If for some reason the WAL files from pg_receivewal were moved, it is
better to try a restart where we left at, which is the replication
slot's restart_lsn instead of skipping right to the current flush
location, to avoid holes in the WAL backed up.  This commit changes
pg_receivewal to use the following sequence of methods to determine the
starting streaming LSN:
- Scan the local archives.
- Use the slot's restart_lsn, if supported by the backend and if a slot
is defined.
- Fallback to the current flush LSN as reported by IDENTIFY_SYSTEM.

To keep compatibility with older server versions, we only attempt to use
READ_REPLICATION_SLOT if the backend version is at least 15, and
fallback to the older behavior of streaming from the current flush
LSN if the command is not supported.

Some TAP tests are added to cover this feature.

Author: Ronan Dunklau
Reviewed-by: Kyotaro Horiguchi, Michael Paquier, Bharath Rupireddy
Discussion: https://postgr.es/m/18708360.4lzOvYHigE@aivenronan
2021-10-26 09:30:37 +09:00
..
2021-09-28 15:26:25 +02:00
2020-07-05 15:37:57 +02:00
2020-09-10 14:15:26 +02:00
2021-07-16 12:39:45 +02:00
2020-10-26 19:17:05 -04:00
2021-09-29 11:56:13 +09:00
2020-02-26 13:05:30 -08:00
2020-03-29 11:15:11 +02:00
2018-10-11 11:43:56 -07:00
2021-01-29 14:09:41 +13:00
2021-09-26 19:17:30 +09:00
2020-07-18 22:43:35 +09:00
2021-04-07 13:52:26 +02:00
2020-10-19 13:48:00 +02:00
2020-06-07 13:18:36 +02:00
2021-07-05 09:36:11 +05:30
2017-10-17 15:10:33 -04:00
2020-07-18 22:43:35 +09:00
2021-07-05 09:36:11 +05:30
2019-10-25 20:39:41 +02:00
2021-07-16 12:39:45 +02:00
2017-10-17 15:10:33 -04:00
2017-10-17 15:10:33 -04:00
2020-07-18 22:43:35 +09:00
2020-10-19 19:28:54 +03:00
2021-07-16 12:39:45 +02:00
2021-01-02 13:06:25 -05:00
2021-08-13 10:32:17 +02:00
2019-09-08 10:27:29 +02:00
2021-09-19 11:36:53 -04:00
2021-08-27 18:20:40 +02:00
2021-10-21 08:01:25 +05:30
2021-01-05 14:26:37 -05:00
2017-10-17 15:10:33 -04:00
2020-08-28 08:19:12 +02:00
2021-07-16 12:39:45 +02:00
2017-10-17 15:10:33 -04:00
2020-12-23 09:33:20 -05:00
2021-07-05 09:36:11 +05:30
2021-06-28 11:31:16 -04:00
2021-06-28 11:31:16 -04:00
2021-08-06 20:55:59 +02:00
2019-09-08 10:27:29 +02:00
2021-09-29 11:56:13 +09:00
2019-03-27 23:10:23 +01:00
2021-07-16 12:39:45 +02:00
2019-09-08 10:27:29 +02:00

<!-- doc/src/sgml/README.links -->

Linking within DocBook documents can be confusing, so here is a summary:


Intra-document Linking
----------------------

<xref>
	use to get chapter/section number from the title of the target
	link, or xreflabel if defined at the target, or refentrytitle if target
        is a refentry;  has no close tag
	http://www.oasis-open.org/docbook/documentation/reference/html/xref.html

linkend=
	controls the target of the link/xref, required

endterm=
	for <xref>, allows the text of the link/xref to be taken from a
	different link target title

<link>
	use to supply text for the link, only uses linkend, requires </link>
	http://www.oasis-open.org/docbook/documentation/reference/html/link.html
	can be embedded inside of <command>, unlike <xref>


External Linking
----------------

<ulink>
	like <link>, but uses a URL (not a document target);  requires
	</ulink>; if no text is specified, the URL appears as the link
	text
	http://www.oasis-open.org/docbook/documentation/reference/html/ulink.html

url=
	used by <ulink> to specify the URL, required


Guidelines
----------

- For an internal link, if you want to supply text, use <link>, else
  <xref>.

- Specific nouns like GUC variables, SQL commands, and contrib modules
  usually have xreflabels.

- For an external link, use <ulink>, with or without link text.

- xreflabels added to tags prevent the chapter/section for id's from being
  referenced;  only the xreflabel is accessible.  Therefore, use xreflabels
  only when linking is common, and chapter/section information is unneeded.