mirror of
https://github.com/postgres/postgres.git
synced 2025-06-23 14:01:44 +03:00
Logical replication
- Add PUBLICATION catalogs and DDL - Add SUBSCRIPTION catalog and DDL - Define logical replication protocol and output plugin - Add logical replication workers From: Petr Jelinek <petr@2ndquadrant.com> Reviewed-by: Steve Singer <steve@ssinger.info> Reviewed-by: Andres Freund <andres@anarazel.de> Reviewed-by: Erik Rijkers <er@xs4all.nl> Reviewed-by: Peter Eisentraut <peter.eisentraut@2ndquadrant.com>
This commit is contained in:
35
src/backend/utils/cache/inval.c
vendored
35
src/backend/utils/cache/inval.c
vendored
@ -375,11 +375,16 @@ AddRelcacheInvalidationMessage(InvalidationListHeader *hdr,
|
||||
{
|
||||
SharedInvalidationMessage msg;
|
||||
|
||||
/* Don't add a duplicate item */
|
||||
/* We assume dbId need not be checked because it will never change */
|
||||
/*
|
||||
* Don't add a duplicate item.
|
||||
* We assume dbId need not be checked because it will never change.
|
||||
* InvalidOid for relId means all relations so we don't need to add
|
||||
* individual ones when it is present.
|
||||
*/
|
||||
ProcessMessageList(hdr->rclist,
|
||||
if (msg->rc.id == SHAREDINVALRELCACHE_ID &&
|
||||
msg->rc.relId == relId)
|
||||
(msg->rc.relId == relId ||
|
||||
msg->rc.relId == InvalidOid))
|
||||
return);
|
||||
|
||||
/* OK, add the item */
|
||||
@ -509,8 +514,10 @@ RegisterRelcacheInvalidation(Oid dbId, Oid relId)
|
||||
/*
|
||||
* If the relation being invalidated is one of those cached in the local
|
||||
* relcache init file, mark that we need to zap that file at commit.
|
||||
* Same is true when we are invalidating whole relcache.
|
||||
*/
|
||||
if (OidIsValid(dbId) && RelationIdIsInInitFile(relId))
|
||||
if (OidIsValid(dbId) &&
|
||||
(RelationIdIsInInitFile(relId) || relId == InvalidOid))
|
||||
transInvalInfo->RelcacheInitFileInval = true;
|
||||
}
|
||||
|
||||
@ -565,7 +572,10 @@ LocalExecuteInvalidationMessage(SharedInvalidationMessage *msg)
|
||||
{
|
||||
int i;
|
||||
|
||||
RelationCacheInvalidateEntry(msg->rc.relId);
|
||||
if (msg->rc.relId == InvalidOid)
|
||||
RelationCacheInvalidate();
|
||||
else
|
||||
RelationCacheInvalidateEntry(msg->rc.relId);
|
||||
|
||||
for (i = 0; i < relcache_callback_count; i++)
|
||||
{
|
||||
@ -1226,6 +1236,21 @@ CacheInvalidateRelcache(Relation relation)
|
||||
RegisterRelcacheInvalidation(databaseId, relationId);
|
||||
}
|
||||
|
||||
/*
|
||||
* CacheInvalidateRelcacheAll
|
||||
* Register invalidation of the whole relcache at the end of command.
|
||||
*
|
||||
* This is used by alter publication as changes in publications may affect
|
||||
* large number of tables.
|
||||
*/
|
||||
void
|
||||
CacheInvalidateRelcacheAll(void)
|
||||
{
|
||||
PrepareInvalidationState();
|
||||
|
||||
RegisterRelcacheInvalidation(InvalidOid, InvalidOid);
|
||||
}
|
||||
|
||||
/*
|
||||
* CacheInvalidateRelcacheByTuple
|
||||
* As above, but relation is identified by passing its pg_class tuple.
|
||||
|
Reference in New Issue
Block a user