diff --git a/doc/src/sgml/protocol.sgml b/doc/src/sgml/protocol.sgml index b692648fca4..84ddab09984 100644 --- a/doc/src/sgml/protocol.sgml +++ b/doc/src/sgml/protocol.sgml @@ -2891,13 +2891,25 @@ The commands accepted in replication mode are: - Every DML message contains an arbitrary relation ID, which can be mapped to - an ID in the Relation messages. The Relation messages describe the schema of the - given relation. The Relation message is sent for a given relation either - because it is the first time we send a DML message for given relation in the - current session or because the relation definition has changed since the - last Relation message was sent for it. The protocol assumes that the client - is capable of caching the metadata for as many relations as needed. + Every DML message contains a relation OID, identifying the publisher's + relation that was acted on. Before the first DML message for a given + relation OID, a Relation message will be sent, describing the schema of + that relation. Subsequently, a new Relation message will be sent if + the relation's definition has changed since the last Relation message + was sent for it. (The protocol assumes that the client is capable of + remembering this metadata for as many relations as needed.) + + + + Relation messages identify column types by their OIDs. In the case + of a built-in type, it is assumed that the client can look up that + type OID locally, so no additional data is needed. For a non-built-in + type OID, a Type message will be sent before the Relation message, + to provide the type name associated with that OID. Thus, a client that + needs to specifically identify the types of relation columns should + cache the contents of Type messages, and first consult that cache to + see if the type OID is defined there. If not, look up the type OID + locally. diff --git a/src/backend/replication/logical/worker.c b/src/backend/replication/logical/worker.c index f67d4ce2328..c04abd79e74 100644 --- a/src/backend/replication/logical/worker.c +++ b/src/backend/replication/logical/worker.c @@ -617,7 +617,10 @@ apply_handle_relation(StringInfo s) /* * Handle TYPE message. * - * This is now vestigial; we read the info and discard it. + * This implementation pays no attention to TYPE messages; we expect the user + * to have set things up so that the incoming data is acceptable to the input + * functions for the locally subscribed tables. Hence, we just read and + * discard the message. */ static void apply_handle_type(StringInfo s)