mirror of
https://github.com/postgres/postgres.git
synced 2025-07-15 19:21:59 +03:00
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>
This commit is contained in:
@ -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;
|
||||
|
Reference in New Issue
Block a user