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 /src/include/nodes | |
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 'src/include/nodes')
-rw-r--r-- | src/include/nodes/nodes.h | 1 | ||||
-rw-r--r-- | src/include/nodes/parsenodes.h | 12 |
2 files changed, 13 insertions, 0 deletions
diff --git a/src/include/nodes/nodes.h b/src/include/nodes/nodes.h index 381d84b4e4f..822827aa32d 100644 --- a/src/include/nodes/nodes.h +++ b/src/include/nodes/nodes.h @@ -492,6 +492,7 @@ typedef enum NodeTag T_StartReplicationCmd, T_TimeLineHistoryCmd, T_SQLCmd, + T_WaitClause, /* * TAGS FOR RANDOM OTHER STUFF diff --git a/src/include/nodes/parsenodes.h b/src/include/nodes/parsenodes.h index 518abe42c10..7ad3ddbf579 100644 --- a/src/include/nodes/parsenodes.h +++ b/src/include/nodes/parsenodes.h @@ -1432,6 +1432,17 @@ typedef struct OnConflictClause } OnConflictClause; /* + * WaitClause - + * representation of WAIT FOR clause for BEGIN and START TRANSACTION. + */ +typedef struct WaitClause +{ + NodeTag type; + char *lsn; /* LSN to wait for */ + int timeout; /* Number of milliseconds to limit wait time */ +} WaitClause; + +/* * CommonTableExpr - * representation of WITH list element * @@ -3060,6 +3071,7 @@ typedef struct TransactionStmt char *savepoint_name; /* for savepoint commands */ char *gid; /* for two-phase-commit related commands */ bool chain; /* AND CHAIN option */ + Node *wait; /* WAIT FOR clause */ } TransactionStmt; /* ---------------------- |