diff options
author | Alexander Korotkov <akorotkov@postgresql.org> | 2020-04-07 23:51:10 +0300 |
---|---|---|
committer | Alexander Korotkov <akorotkov@postgresql.org> | 2020-04-07 23:51:10 +0300 |
commit | 0f5ca02f53ac2b211d8518f0882c49284c0c9610 (patch) | |
tree | a5dce13eaa64e00a6ec95b913a155efe7f91c99c /doc/src/sgml/ref | |
parent | 357889eb17bb9c9336c4f324ceb1651da616fe57 (diff) | |
download | postgresql-0f5ca02f53ac2b211d8518f0882c49284c0c9610.tar.gz postgresql-0f5ca02f53ac2b211d8518f0882c49284c0c9610.zip |
Implement waiting for given lsn at transaction start
This commit adds following optional clause to BEGIN and START TRANSACTION
commands.
WAIT FOR LSN lsn [ TIMEOUT timeout ]
New clause pospones transaction start till given lsn is applied on standby.
This clause allows user be sure, that changes previously made on primary would
be visible on standby.
New shared memory struct is used to track awaited lsn per backend. Recovery
process wakes up backend once required lsn is applied.
Author: Ivan Kartyshov, Anna Akenteva
Reviewed-by: Craig Ringer, Thomas Munro, Robert Haas, Kyotaro Horiguchi
Reviewed-by: Masahiko Sawada, Ants Aasma, Dmitry Ivanov, Simon Riggs
Reviewed-by: Amit Kapila, Alexander Korotkov
Discussion: https://postgr.es/m/0240c26c-9f84-30ea-fca9-93ab2df5f305%40postgrespro.ru
Diffstat (limited to 'doc/src/sgml/ref')
-rw-r--r-- | doc/src/sgml/ref/begin.sgml | 17 | ||||
-rw-r--r-- | doc/src/sgml/ref/start_transaction.sgml | 17 |
2 files changed, 32 insertions, 2 deletions
diff --git a/doc/src/sgml/ref/begin.sgml b/doc/src/sgml/ref/begin.sgml index c23bbfb4e71..66d9ad7cb23 100644 --- a/doc/src/sgml/ref/begin.sgml +++ b/doc/src/sgml/ref/begin.sgml @@ -21,7 +21,7 @@ PostgreSQL documentation <refsynopsisdiv> <synopsis> -BEGIN [ WORK | TRANSACTION ] [ <replaceable class="parameter">transaction_mode</replaceable> [, ...] ] +BEGIN [ WORK | TRANSACTION ] [ <replaceable class="parameter">transaction_mode</replaceable> [, ...] ] [ WAIT FOR LSN <replaceable class="parameter">lsn_value</replaceable> [TIMEOUT <replaceable class="parameter">number_of_milliseconds</replaceable> ] ] <phrase>where <replaceable class="parameter">transaction_mode</replaceable> is one of:</phrase> @@ -63,6 +63,17 @@ BEGIN [ WORK | TRANSACTION ] [ <replaceable class="parameter">transaction_mode</ <xref linkend="sql-set-transaction"/> was executed. </para> + + <para> + The <literal>WAIT FOR</literal> clause allows to wait for the target log + sequence number (<acronym>LSN</acronym>) to be replayed on standby before + starting the transaction in <productname>PostgreSQL</productname> databases + with master-standby asynchronous replication. Wait time can be limited by + specifying a timeout, which is measured in milliseconds and must be a positive + integer. If <acronym>LSN</acronym> was not reached before timeout, transaction + doesn't begin. Waiting can be interrupted by cancelling + <literal>BEGIN</literal> command. + </para> </refsect1> <refsect1> @@ -146,6 +157,10 @@ BEGIN; different purpose in embedded SQL. You are advised to be careful about the transaction semantics when porting database applications. </para> + + <para> + There is no <literal>WAIT FOR</literal> clause in the SQL standard. + </para> </refsect1> <refsect1> diff --git a/doc/src/sgml/ref/start_transaction.sgml b/doc/src/sgml/ref/start_transaction.sgml index d6cd1d41779..b94ab00b403 100644 --- a/doc/src/sgml/ref/start_transaction.sgml +++ b/doc/src/sgml/ref/start_transaction.sgml @@ -21,7 +21,7 @@ PostgreSQL documentation <refsynopsisdiv> <synopsis> -START TRANSACTION [ <replaceable class="parameter">transaction_mode</replaceable> [, ...] ] +START TRANSACTION [ <replaceable class="parameter">transaction_mode</replaceable> [, ...] ] [ WAIT FOR LSN <replaceable class="parameter">lsn_value</replaceable> [TIMEOUT <replaceable class="parameter">number_of_milliseconds</replaceable> ] ] <phrase>where <replaceable class="parameter">transaction_mode</replaceable> is one of:</phrase> @@ -40,6 +40,17 @@ START TRANSACTION [ <replaceable class="parameter">transaction_mode</replaceable characteristics, as if <xref linkend="sql-set-transaction"/> was executed. This is the same as the <xref linkend="sql-begin"/> command. </para> + + <para> + The <literal>WAIT FOR</literal> clause allows to wait for the target log + sequence number (<acronym>LSN</acronym>) to be replayed on standby before + starting the transaction in <productname>PostgreSQL</productname> databases + with master-standby asynchronous replication. Wait time can be limited by + specifying a timeout, which is measured in milliseconds and must be a positive + integer. If <acronym>LSN</acronym> was not reached before timeout, transaction + doesn't begin. Waiting can be interrupted by cancelling + <literal>START TRANSACTION</literal> command. + </para> </refsect1> <refsect1> @@ -79,6 +90,10 @@ START TRANSACTION [ <replaceable class="parameter">transaction_mode</replaceable </para> <para> + There is no <literal>WAIT FOR</literal> clause in the SQL standard. + </para> + + <para> See also the compatibility section of <xref linkend="sql-set-transaction"/>. </para> </refsect1> |