| From: | shveta malik <shveta(dot)malik(at)gmail(dot)com> |
|---|---|
| To: | vignesh C <vignesh21(at)gmail(dot)com> |
| Cc: | Nisha Moond <nisha(dot)moond412(at)gmail(dot)com>, Dilip Kumar <dilipbalaut(at)gmail(dot)com>, Amit Kapila <amit(dot)kapila16(at)gmail(dot)com>, Peter Smith <smithpb2250(at)gmail(dot)com>, Masahiko Sawada <sawada(dot)mshk(at)gmail(dot)com>, Bharath Rupireddy <bharath(dot)rupireddyforpostgres(at)gmail(dot)com>, PostgreSQL Hackers <pgsql-hackers(at)lists(dot)postgresql(dot)org>, shveta malik <shvetamalik(at)gmail(dot)com> |
| Subject: | Re: Proposal: Conflict log history table for Logical Replication |
| Date: | 2026-05-20 06:32:11 |
| Message-ID: | CAJpy0uCX53c40xopqmHtWSWBmh78BqhLVGXa88fU42eOi6w+LQ@mail.gmail.com |
| Views: | Whole Thread | Raw Message | Download mbox | Resend email |
| Thread: | |
| Lists: | pgsql-hackers |
On Tue, May 19, 2026 at 7:30 PM vignesh C <vignesh21(at)gmail(dot)com> wrote:
>
> Rest of the comments are handled, the attached v36 version patches
> have the changes for the same.
> Also the comment from [1] has been fixed in this version.
>
Thanks Vignesh.
A few comments for 0001 and 002 combined (I merged them and reviewed
for ease of review)
1)
+ * IsConflictLogTableClass
+ * True iff namespace is pg_conflict.
+ *
+ * Does not perform any catalog accesses.
*/
bool
-IsConflictClass(Form_pg_class reltuple)
+IsConflictLogTableClass(Form_pg_class reltuple)
I think this function is trying to find if the reltuple is a CLT
rather than namepspace is pg_conflict.
We should change this comment. See IsToastRelation, IsToastClass.
Suggestion:
True iff Form_pg_class tuple represents a subscription-specific
Conflict Log Table.
2)
Both DropSubscription and AlterSubscription has below code to drop CLT:
+ if (OidIsValid(subconflictlogrelid))
+ {
+ char *conflictrelname = get_rel_name(subconflictlogrelid);
+
+ /*
+ * Conflict log tables are recorded as internal dependencies of the
+ * subscription. We must drop the dependent objects before the
+ * subscription itself is removed. By using
+ * PERFORM_DELETION_SKIP_ORIGINAL, we ensure that only the conflict log
+ * table is reaped while the subscription remains for the final
+ * deletion step.
+ */
+ ObjectAddressSet(object, SubscriptionRelationId, subid);
+ performDeletion(&object, DROP_CASCADE,
+ PERFORM_DELETION_INTERNAL |
+ PERFORM_DELETION_SKIP_ORIGINAL);
+
+ ereport(NOTICE,
+ errmsg("dropped conflict log table \"%s\" for subscription \"%s\"",
+ get_qualified_objname(PG_CONFLICT_NAMESPACE, conflictrelname),
+ subname));
+ }
Why don't we create a function
drop_conflict_log_table(subconflictlogrelid) and use it both places.
3)
+++ b/src/backend/commands/subscriptioncmds.c
+#include "catalog/heap.h"
+#include "catalog/pg_am_d.h"
It compiles now without these inclusion. 002 should remove these as well.
4)
AlterSubscription:
+ bool want_table = (opts.conflictlogdest == CONFLICT_LOG_DEST_TABLE ||
+ opts.conflictlogdest == CONFLICT_LOG_DEST_ALL);
+ bool has_oldtable = (old_dest == CONFLICT_LOG_DEST_TABLE ||
+ old_dest == CONFLICT_LOG_DEST_ALL);
Shall we replace checks at both places with CONFLICTS_LOGGED_TO_TABLE
~~
003,004: No comments
~~
Reviewing further.
thanks
Shveta
| From | Date | Subject | |
|---|---|---|---|
| Next Message | Jim Jones | 2026-05-20 07:03:26 | Re: PSQL - prevent describe listing tables that are already in listed schemas |
| Previous Message | Chao Li | 2026-05-20 06:28:43 | Re: Fix SPLIT PARTITION bound-overlap bug and other improvements |