mirror of
https://github.com/postgres/postgres.git
synced 2025-06-13 07:41:39 +03:00
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
This commit is contained in:
@ -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>
|
||||
|
@ -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>
|
||||
@ -78,6 +89,10 @@ START TRANSACTION [ <replaceable class="parameter">transaction_mode</replaceable
|
||||
omitted.
|
||||
</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>
|
||||
|
Reference in New Issue
Block a user