Re: Column Filtering in Logical Replication
Ibrar Ahmed <ibrar.ahmad@gmail.com>
On Tue, Jul 13, 2021 at 7:44 PM Rahila Syed <rahilasyed90@gmail.com> wrote: > > 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 > > > The patch does not apply, and an rebase is required Hunk #8 succeeded at 1259 (offset 99 lines). Hunk #9 succeeded at 1360 (offset 99 lines). 1 out of 9 hunks FAILED -- saving rejects to file src/backend/replication/pgoutput/pgoutput.c.rej patching file src/include/catalog/pg_publication.h Changing the status to "Waiting on Author" -- Ibrar Ahmed
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