Re: Column Filtering in Logical Replication
Rahila Syed <rahilasyed90@gmail.com>
Attachments
- v2-0001-Add-column-filtering-to-logical-replication.patch (application/octet-stream) patch v2-0001
Hi Tomas, Thank you for your comments. > > > > > Currently, this capability is not included in the patch. If the table on > > the subscriber > > server has lesser attributes than that on the publisher server, it > > throws an error at the > > time of CREATE SUBSCRIPTION. > > > > That's a bit surprising, to be honest. I do understand the patch simply > treats the filtered columns as "unchanged" because that's the simplest > way to filter the *data* of the columns. But if someone told me we can > "filter columns" I'd expect this to work without the columns on the > subscriber. > > OK, I will look into adding this. > > > However, need to carefully consider situations in which a server > > subscribes to multiple > > publications, each publishing a different subset of columns of a table. Isn't that pretty much the same situation as for multiple subscriptions > each with a different set of I/U/D operations? IIRC we simply merge > those, so why not to do the same thing here and merge the attributes? > > Yeah, I agree with the solution to merge the attributes, similar to how operations are merged. My concern was also from an implementation point of view, will it be a very drastic change. I now had a look at how remote relation attributes are acquired for comparison with local attributes at the subscriber. It seems that the publisher will need to send the information about the filtered columns for each publication specified during CREATE SUBSCRIPTION. This will be read at the subscriber side which in turn updates its cache accordingly. Currently, the subscriber expects all attributes of a published relation to be present. I will add code for this in the next version of the patch. To nitpick, I find "Bitmapset *att_list" a bit annoying, because it's not really a list ;-) I will make this change with the next version > FWIW "make check" fails for me with this version, due to segfault in > OpenTableLists. Apparenly there's some confusion - the code expects the > list to contain PublicationTable nodes, and tries to extract the > RangeVar from the elements. But the list actually contains RangeVar, so > this crashes and burns. See the attached backtrace. > > Thank you for the report, This is fixed in the attached version, now all publication function calls accept the PublicationTableInfo list. Thank you, Rahila Syed
Commits
GET /api/v1/messages/:b64id/commits
the thread's linked commits as JSON, with link sources.
API reference →
-
Doc: Explain about Column List feature.
- f98d07424523 16.0 landed
- 25996a82a446 15.0 landed
-
Doc: fix column list vs. replica identity rules.
- 376af686111e 16.0 landed
- ab3131880d8a 15.0 landed
-
Prohibit combining publications with different column lists.
- fd0b9dcebda7 15.0 cited
-
Fix the check to limit sync workers.
- be46985bed8a 10.21 landed
- a90de822e483 11.16 landed
- 59348fbdeb7b 12.11 landed
- 82d4a17a1750 13.7 landed
- c9dea58e2702 14.3 landed
- dd4ab6fd6528 15.0 landed
-
Wait for subscription to sync in t/031_column_list.sql
- 404f49338fef 15.0 landed
-
Move prattrs to the pg_publication_rel section in docs
- 41b00f8e601f 15.0 landed
-
Allow specifying column lists for logical replication
- 923def9a533a 15.0 landed
-
Fix row filters with multiple publications
- 5a079662256e 15.0 landed
-
Fix publish_as_relid with multiple publications
- 27fafee72d17 13.7 landed
- 677a1dc0ca0f 14.3 landed
- c91f71b9dc91 15.0 landed
-
Add some additional tests for row filters in logical replication.
- ceb57afd3ce1 15.0 cited
-
Add index on pg_publication_rel.prpubid
- 025b920a3d45 15.0 landed
-
Avoid using DefElemAction in AlterPublicationStmt
- 9623d8999603 15.0 landed
-
Small cleanups related to PUBLICATION framework code
- c9105dd3660f 15.0 landed
-
Add PublicationTable and PublicationRelInfo structs
- 0c6828fa987b 15.0 landed
-
Fix various concurrency issues in logical replication worker launching
- de4389712206 10.0 cited