Fix negative bitmapset member not allowed error in logical replication
authorPeter Eisentraut <[email protected]>
Thu, 7 Nov 2019 12:48:59 +0000 (13:48 +0100)
committerPeter Eisentraut <[email protected]>
Sat, 9 Nov 2019 08:15:35 +0000 (09:15 +0100)
commit2e00d5976419ff8db38ea1e1a0bc65dbd504fcfa
tree14a0e38fb12f6f5d1d24138f0e109aedc8cdb05b
parent4cc66a2a4afca89208317928ec0c8721a999bb7d
Fix negative bitmapset member not allowed error in logical replication

This happens when we add a replica identity column on a subscriber
that does not yet exist on the publisher, according to the mapping
maintained by the subscriber.  Code that checks whether the target
relation on the subscriber is updatable would check the replica
identity attribute bitmap with a column number -1, which would result
in an error.  To fix, skip such columns in the bitmap lookup and
consider the relation not updatable.  The result is consistent with
the rule that the replica identity columns on the subscriber must be a
subset of those on the publisher, since if the column doesn't exist on
the publisher, the column set on the subscriber can't be a subset.

Reported-by: Tim Clarke <[email protected]>
Analyzed-by: Jehan-Guillaume de Rorthais <[email protected]>
Discussion: https://www.postgresql.org/message-id/flat/a9139c29-7ddd-973b-aa7f-71fed9c38d75%40minerva.info
src/backend/replication/logical/relation.c
src/test/subscription/t/008_diff_schema.pl