diff options
author | Peter Eisentraut <peter_e@gmx.net> | 2017-06-07 13:49:14 -0400 |
---|---|---|
committer | Peter Eisentraut <peter_e@gmx.net> | 2017-06-07 13:49:14 -0400 |
commit | 644ea35fc1352d845299563c7ddfb8b524ed27d9 (patch) | |
tree | b020ec700bd642a3556dc87f5547bfe73afd350b /src/backend/replication/logical/tablesync.c | |
parent | 15ce775faa428dc91027e4e2d6b7a167a27118b5 (diff) | |
download | postgresql-644ea35fc1352d845299563c7ddfb8b524ed27d9.tar.gz postgresql-644ea35fc1352d845299563c7ddfb8b524ed27d9.zip |
Fix updating of pg_subscription_rel from workers
A logical replication worker should not insert new rows into
pg_subscription_rel, only update existing rows, so that there are no
races if a concurrent refresh removes rows. Adjust the API to be able
to choose that behavior.
Author: Masahiko Sawada <sawada.mshk@gmail.com>
Reported-by: tushar <tushar.ahuja@enterprisedb.com>
Diffstat (limited to 'src/backend/replication/logical/tablesync.c')
-rw-r--r-- | src/backend/replication/logical/tablesync.c | 11 |
1 files changed, 7 insertions, 4 deletions
diff --git a/src/backend/replication/logical/tablesync.c b/src/backend/replication/logical/tablesync.c index 6fe39d20237..f57ae6ee2d5 100644 --- a/src/backend/replication/logical/tablesync.c +++ b/src/backend/replication/logical/tablesync.c @@ -287,7 +287,8 @@ process_syncing_tables_for_sync(XLogRecPtr current_lsn) SetSubscriptionRelState(MyLogicalRepWorker->subid, MyLogicalRepWorker->relid, MyLogicalRepWorker->relstate, - MyLogicalRepWorker->relstate_lsn); + MyLogicalRepWorker->relstate_lsn, + true); walrcv_endstreaming(wrconn, &tli); finish_sync_worker(); @@ -414,7 +415,7 @@ process_syncing_tables_for_apply(XLogRecPtr current_lsn) } SetSubscriptionRelState(MyLogicalRepWorker->subid, rstate->relid, rstate->state, - rstate->lsn); + rstate->lsn, true); } } else @@ -845,7 +846,8 @@ LogicalRepSyncTableStart(XLogRecPtr *origin_startpos) SetSubscriptionRelState(MyLogicalRepWorker->subid, MyLogicalRepWorker->relid, MyLogicalRepWorker->relstate, - MyLogicalRepWorker->relstate_lsn); + MyLogicalRepWorker->relstate_lsn, + true); CommitTransactionCommand(); pgstat_report_stat(false); @@ -932,7 +934,8 @@ LogicalRepSyncTableStart(XLogRecPtr *origin_startpos) SetSubscriptionRelState(MyLogicalRepWorker->subid, MyLogicalRepWorker->relid, SUBREL_STATE_SYNCDONE, - *origin_startpos); + *origin_startpos, + true); finish_sync_worker(); } break; |