Re: Column Filtering in Logical Replication
Alvaro Herrera <alvherre@alvh.no-ip.org>
Attachments
On 2021-Sep-06, Rahila Syed wrote: > > > ... ugh. Since CASCADE is already defined to be a > > > potentially-data-loss operation, then that may be acceptable > > > behavior. For sure the default RESTRICT behavior shouldn't do it, > > > though. > > > > That makes sense to me. > > However, the default (RESTRICT) behaviour of DROP TABLE allows > removing the table from the publication. I have implemented the > removal of table from publication on drop column (RESTRICT) on the > same lines. But dropping the table is quite a different action from dropping a column, isn't it? If you drop a table, it seems perfectly reasonable that it has to be removed from the publication -- essentially, when the user drops a table, she is saying "I don't care about this table anymore". However, if you drop just one column, that doesn't necessarily mean that the user wants to stop publishing the whole table. Removing the table from the publication in ALTER TABLE DROP COLUMN seems like an overreaction. (Except perhaps in the special case were the column being dropped is the only one that was being published.) So let's discuss what should happen. If you drop a column, and the column is filtered out, then it seems to me that the publication should continue to have the table, and it should continue to filter out the other columns that were being filtered out, regardless of CASCADE/RESTRICT. However, if the column is *included* in the publication, and you drop it, ISTM there are two cases: 1. If it's DROP CASCADE, then the list of columns to replicate should continue to have all columns it previously had, so just remove the column that is being dropped. 2. If it's DROP RESTRICT, then an error should be raised so that the user can make a concious decision to remove the column from the filter before dropping the column. > Did you give any thoughts to my earlier suggestion related to syntax [1]? > > [1] https://www.postgresql.org/message-id/CAA4eK1J9b_0_PMnJ2jq9E55bcbmTKdUmy6jPnkf1Zwy2jxah_g%40mail.gmail.com This is a great followup idea, after the current feature is committed. There are a few things that have been reported in review comments; let's get those addressed before adding more features on top. I pushed the clerical part of this -- namely the addition of PublicationTable node and PublicationRelInfo struct. I attach the part of your v4 patch that I didn't include. It contains a couple of small corrections, but I didn't do anything invasive (such as pgindent) because that would perhaps cause you too much merge pain. -- Álvaro Herrera 39°49'30"S 73°17'W — https://www.EnterpriseDB.com/
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