Re: Test mail for pgsql-hackers

Started by BharatDB10 months ago5 messages
#1BharatDB
bharatdbpg@gmail.com
1 attachment(s)

Hi ,

I’ve been exploring logical replication and noticed that if the column
datatypes don’t match between the publisher and subscriber, PostgreSQL
doesn’t give a warning. This can cause unexpected behavior, and I thought
it might be helpful to alert users when this happens.

### **What This Patch Does:**

- Adds a warning when a column's datatype in the subscriber doesn’t match
the publisher.

- Helps users catch issues early instead of running into silent errors

Show quoted text

later.

Why I Think It’s Useful:- Avoids confusion when replication doesn’t work
as expected. - Makes debugging easier by pointing out potential problems.
I’d love to get feedback on whether this is a good idea and if I’ve
approached it correctly. Since I’m still learning, any suggestions for
improvement would be really helpful. I’ve attached the patch—please let me
know what you think!

Thanks, Blessy

Attachments:

Datatype_mismatch_logicalreplication_.patchtext/x-patch; charset=US-ASCII; name=Datatype_mismatch_logicalreplication_.patchDownload
From 418a9e40f2b98dfef99eb4c79e87490e192969c2 Mon Sep 17 00:00:00 2001
From: Blessy456b <blessy456bthomas@gmail.com>
Date: Tue, 11 Mar 2025 17:20:43 +0530
Subject: [PATCH] Added logical replication warning

---
 src/backend/replication/logical/tablesync.c   | 28 +++++++++++++++++++
 .../aborted-keyrevoke.spec                    |  0
 .../alter-table-1.spec                        |  0
 .../alter-table-2.spec                        |  0
 .../alter-table-3.spec                        |  0
 .../alter-table-4.spec                        |  0
 .../{specs => specs_backup}/async-notify.spec |  0
 .../classroom-scheduling.spec                 |  0
 .../cluster-conflict-partition.spec           |  0
 .../cluster-conflict.spec                     |  0
 .../create-trigger.spec                       |  0
 .../deadlock-hard.spec                        |  0
 .../deadlock-parallel.spec                    |  0
 .../deadlock-simple.spec                      |  0
 .../deadlock-soft-2.spec                      |  0
 .../deadlock-soft.spec                        |  0
 .../delete-abort-savept-2.spec                |  0
 .../delete-abort-savept.spec                  |  0
 .../detach-partition-concurrently-1.spec      |  0
 .../detach-partition-concurrently-2.spec      |  0
 .../detach-partition-concurrently-3.spec      |  0
 .../detach-partition-concurrently-4.spec      |  0
 .../drop-index-concurrently-1.spec            |  0
 .../eval-plan-qual-trigger.spec               |  0
 .../eval-plan-qual.spec                       |  0
 .../fk-contention.spec                        |  0
 .../{specs => specs_backup}/fk-deadlock.spec  |  0
 .../{specs => specs_backup}/fk-deadlock2.spec |  0
 .../fk-partitioned-1.spec                     |  0
 .../fk-partitioned-2.spec                     |  0
 .../{specs => specs_backup}/fk-snapshot.spec  |  0
 .../freeze-the-dead.spec                      |  0
 .../{specs => specs_backup}/horizons.spec     |  0
 .../index-only-scan.spec                      |  0
 .../{specs => specs_backup}/inherit-temp.spec |  0
 .../inplace-inval.spec                        |  0
 .../insert-conflict-do-nothing-2.spec         |  0
 .../insert-conflict-do-nothing.spec           |  0
 .../insert-conflict-do-update-2.spec          |  0
 .../insert-conflict-do-update-3.spec          |  0
 .../insert-conflict-do-update.spec            |  0
 .../insert-conflict-specconflict.spec         |  0
 .../intra-grant-inplace-db.spec               |  0
 .../intra-grant-inplace.spec                  |  0
 .../lock-committed-keyupdate.spec             |  0
 .../lock-committed-update.spec                |  0
 .../{specs => specs_backup}/lock-nowait.spec  |  0
 .../lock-update-delete.spec                   |  0
 .../lock-update-traversal.spec                |  0
 .../matview-write-skew.spec                   |  0
 .../{specs => specs_backup}/merge-delete.spec |  0
 .../merge-insert-update.spec                  |  0
 .../{specs => specs_backup}/merge-join.spec   |  0
 .../merge-match-recheck.spec                  |  0
 .../{specs => specs_backup}/merge-update.spec |  0
 .../{specs => specs_backup}/multiple-cic.spec |  0
 .../multiple-row-versions.spec                |  0
 .../multixact-no-deadlock.spec                |  0
 .../multixact-no-forget.spec                  |  0
 .../{specs => specs_backup}/nowait-2.spec     |  0
 .../{specs => specs_backup}/nowait-3.spec     |  0
 .../{specs => specs_backup}/nowait-4.spec     |  0
 .../{specs => specs_backup}/nowait-5.spec     |  0
 .../{specs => specs_backup}/nowait.spec       |  0
 .../partial-index.spec                        |  0
 .../partition-concurrent-attach.spec          |  0
 .../partition-drop-index-locking.spec         |  0
 .../partition-key-update-1.spec               |  0
 .../partition-key-update-2.spec               |  0
 .../partition-key-update-3.spec               |  0
 .../partition-key-update-4.spec               |  0
 .../plpgsql-toast.spec                        |  0
 .../predicate-gin.spec                        |  0
 .../predicate-gist.spec                       |  0
 .../predicate-hash.spec                       |  0
 .../predicate-lock-hot-tuple.spec             |  0
 .../prepared-transactions-cic.spec            |  0
 .../prepared-transactions.spec                |  0
 .../project-manager.spec                      |  0
 .../propagate-lock-delete.spec                |  0
 .../read-only-anomaly-2.spec                  |  0
 .../read-only-anomaly-3.spec                  |  0
 .../read-only-anomaly.spec                    |  0
 .../read-write-unique-2.spec                  |  0
 .../read-write-unique-3.spec                  |  0
 .../read-write-unique-4.spec                  |  0
 .../read-write-unique.spec                    |  0
 .../receipt-report.spec                       |  0
 .../referential-integrity.spec                |  0
 .../reindex-concurrently-toast.spec           |  0
 .../reindex-concurrently.spec                 |  0
 .../reindex-schema.spec                       |  0
 .../{specs => specs_backup}/ri-trigger.spec   |  0
 .../{specs => specs_backup}/sequence-ddl.spec |  0
 .../serializable-parallel-2.spec              |  0
 .../serializable-parallel-3.spec              |  0
 .../serializable-parallel.spec                |  0
 .../simple-write-skew.spec                    |  0
 .../skip-locked-2.spec                        |  0
 .../skip-locked-3.spec                        |  0
 .../skip-locked-4.spec                        |  0
 .../{specs => specs_backup}/skip-locked.spec  |  0
 .../{specs => specs_backup}/stats.spec        |  0
 .../subxid-overflow.spec                      |  0
 .../temp-schema-cleanup.spec                  |  0
 .../temporal-range-integrity.spec             |  0
 .../{specs => specs_backup}/timeouts.spec     |  0
 .../{specs => specs_backup}/total-cash.spec   |  0
 .../truncate-conflict.spec                    |  0
 .../tuplelock-conflict.spec                   |  0
 .../tuplelock-partition.spec                  |  0
 .../tuplelock-update.spec                     |  0
 .../tuplelock-upgrade-no-deadlock.spec        |  0
 .../{specs => specs_backup}/two-ids.spec      |  0
 .../update-conflict-out.spec                  |  0
 .../update-locked-tuple.spec                  |  0
 .../vacuum-concurrent-drop.spec               |  0
 .../vacuum-conflict.spec                      |  0
 .../vacuum-no-cleanup-lock.spec               |  0
 .../vacuum-skip-locked.spec                   |  0
 120 files changed, 28 insertions(+)
 rename src/test/isolation/{specs => specs_backup}/aborted-keyrevoke.spec (100%)
 rename src/test/isolation/{specs => specs_backup}/alter-table-1.spec (100%)
 rename src/test/isolation/{specs => specs_backup}/alter-table-2.spec (100%)
 rename src/test/isolation/{specs => specs_backup}/alter-table-3.spec (100%)
 rename src/test/isolation/{specs => specs_backup}/alter-table-4.spec (100%)
 rename src/test/isolation/{specs => specs_backup}/async-notify.spec (100%)
 rename src/test/isolation/{specs => specs_backup}/classroom-scheduling.spec (100%)
 rename src/test/isolation/{specs => specs_backup}/cluster-conflict-partition.spec (100%)
 rename src/test/isolation/{specs => specs_backup}/cluster-conflict.spec (100%)
 rename src/test/isolation/{specs => specs_backup}/create-trigger.spec (100%)
 rename src/test/isolation/{specs => specs_backup}/deadlock-hard.spec (100%)
 rename src/test/isolation/{specs => specs_backup}/deadlock-parallel.spec (100%)
 rename src/test/isolation/{specs => specs_backup}/deadlock-simple.spec (100%)
 rename src/test/isolation/{specs => specs_backup}/deadlock-soft-2.spec (100%)
 rename src/test/isolation/{specs => specs_backup}/deadlock-soft.spec (100%)
 rename src/test/isolation/{specs => specs_backup}/delete-abort-savept-2.spec (100%)
 rename src/test/isolation/{specs => specs_backup}/delete-abort-savept.spec (100%)
 rename src/test/isolation/{specs => specs_backup}/detach-partition-concurrently-1.spec (100%)
 rename src/test/isolation/{specs => specs_backup}/detach-partition-concurrently-2.spec (100%)
 rename src/test/isolation/{specs => specs_backup}/detach-partition-concurrently-3.spec (100%)
 rename src/test/isolation/{specs => specs_backup}/detach-partition-concurrently-4.spec (100%)
 rename src/test/isolation/{specs => specs_backup}/drop-index-concurrently-1.spec (100%)
 rename src/test/isolation/{specs => specs_backup}/eval-plan-qual-trigger.spec (100%)
 rename src/test/isolation/{specs => specs_backup}/eval-plan-qual.spec (100%)
 rename src/test/isolation/{specs => specs_backup}/fk-contention.spec (100%)
 rename src/test/isolation/{specs => specs_backup}/fk-deadlock.spec (100%)
 rename src/test/isolation/{specs => specs_backup}/fk-deadlock2.spec (100%)
 rename src/test/isolation/{specs => specs_backup}/fk-partitioned-1.spec (100%)
 rename src/test/isolation/{specs => specs_backup}/fk-partitioned-2.spec (100%)
 rename src/test/isolation/{specs => specs_backup}/fk-snapshot.spec (100%)
 rename src/test/isolation/{specs => specs_backup}/freeze-the-dead.spec (100%)
 rename src/test/isolation/{specs => specs_backup}/horizons.spec (100%)
 rename src/test/isolation/{specs => specs_backup}/index-only-scan.spec (100%)
 rename src/test/isolation/{specs => specs_backup}/inherit-temp.spec (100%)
 rename src/test/isolation/{specs => specs_backup}/inplace-inval.spec (100%)
 rename src/test/isolation/{specs => specs_backup}/insert-conflict-do-nothing-2.spec (100%)
 rename src/test/isolation/{specs => specs_backup}/insert-conflict-do-nothing.spec (100%)
 rename src/test/isolation/{specs => specs_backup}/insert-conflict-do-update-2.spec (100%)
 rename src/test/isolation/{specs => specs_backup}/insert-conflict-do-update-3.spec (100%)
 rename src/test/isolation/{specs => specs_backup}/insert-conflict-do-update.spec (100%)
 rename src/test/isolation/{specs => specs_backup}/insert-conflict-specconflict.spec (100%)
 rename src/test/isolation/{specs => specs_backup}/intra-grant-inplace-db.spec (100%)
 rename src/test/isolation/{specs => specs_backup}/intra-grant-inplace.spec (100%)
 rename src/test/isolation/{specs => specs_backup}/lock-committed-keyupdate.spec (100%)
 rename src/test/isolation/{specs => specs_backup}/lock-committed-update.spec (100%)
 rename src/test/isolation/{specs => specs_backup}/lock-nowait.spec (100%)
 rename src/test/isolation/{specs => specs_backup}/lock-update-delete.spec (100%)
 rename src/test/isolation/{specs => specs_backup}/lock-update-traversal.spec (100%)
 rename src/test/isolation/{specs => specs_backup}/matview-write-skew.spec (100%)
 rename src/test/isolation/{specs => specs_backup}/merge-delete.spec (100%)
 rename src/test/isolation/{specs => specs_backup}/merge-insert-update.spec (100%)
 rename src/test/isolation/{specs => specs_backup}/merge-join.spec (100%)
 rename src/test/isolation/{specs => specs_backup}/merge-match-recheck.spec (100%)
 rename src/test/isolation/{specs => specs_backup}/merge-update.spec (100%)
 rename src/test/isolation/{specs => specs_backup}/multiple-cic.spec (100%)
 rename src/test/isolation/{specs => specs_backup}/multiple-row-versions.spec (100%)
 rename src/test/isolation/{specs => specs_backup}/multixact-no-deadlock.spec (100%)
 rename src/test/isolation/{specs => specs_backup}/multixact-no-forget.spec (100%)
 rename src/test/isolation/{specs => specs_backup}/nowait-2.spec (100%)
 rename src/test/isolation/{specs => specs_backup}/nowait-3.spec (100%)
 rename src/test/isolation/{specs => specs_backup}/nowait-4.spec (100%)
 rename src/test/isolation/{specs => specs_backup}/nowait-5.spec (100%)
 rename src/test/isolation/{specs => specs_backup}/nowait.spec (100%)
 rename src/test/isolation/{specs => specs_backup}/partial-index.spec (100%)
 rename src/test/isolation/{specs => specs_backup}/partition-concurrent-attach.spec (100%)
 rename src/test/isolation/{specs => specs_backup}/partition-drop-index-locking.spec (100%)
 rename src/test/isolation/{specs => specs_backup}/partition-key-update-1.spec (100%)
 rename src/test/isolation/{specs => specs_backup}/partition-key-update-2.spec (100%)
 rename src/test/isolation/{specs => specs_backup}/partition-key-update-3.spec (100%)
 rename src/test/isolation/{specs => specs_backup}/partition-key-update-4.spec (100%)
 rename src/test/isolation/{specs => specs_backup}/plpgsql-toast.spec (100%)
 rename src/test/isolation/{specs => specs_backup}/predicate-gin.spec (100%)
 rename src/test/isolation/{specs => specs_backup}/predicate-gist.spec (100%)
 rename src/test/isolation/{specs => specs_backup}/predicate-hash.spec (100%)
 rename src/test/isolation/{specs => specs_backup}/predicate-lock-hot-tuple.spec (100%)
 rename src/test/isolation/{specs => specs_backup}/prepared-transactions-cic.spec (100%)
 rename src/test/isolation/{specs => specs_backup}/prepared-transactions.spec (100%)
 rename src/test/isolation/{specs => specs_backup}/project-manager.spec (100%)
 rename src/test/isolation/{specs => specs_backup}/propagate-lock-delete.spec (100%)
 rename src/test/isolation/{specs => specs_backup}/read-only-anomaly-2.spec (100%)
 rename src/test/isolation/{specs => specs_backup}/read-only-anomaly-3.spec (100%)
 rename src/test/isolation/{specs => specs_backup}/read-only-anomaly.spec (100%)
 rename src/test/isolation/{specs => specs_backup}/read-write-unique-2.spec (100%)
 rename src/test/isolation/{specs => specs_backup}/read-write-unique-3.spec (100%)
 rename src/test/isolation/{specs => specs_backup}/read-write-unique-4.spec (100%)
 rename src/test/isolation/{specs => specs_backup}/read-write-unique.spec (100%)
 rename src/test/isolation/{specs => specs_backup}/receipt-report.spec (100%)
 rename src/test/isolation/{specs => specs_backup}/referential-integrity.spec (100%)
 rename src/test/isolation/{specs => specs_backup}/reindex-concurrently-toast.spec (100%)
 rename src/test/isolation/{specs => specs_backup}/reindex-concurrently.spec (100%)
 rename src/test/isolation/{specs => specs_backup}/reindex-schema.spec (100%)
 rename src/test/isolation/{specs => specs_backup}/ri-trigger.spec (100%)
 rename src/test/isolation/{specs => specs_backup}/sequence-ddl.spec (100%)
 rename src/test/isolation/{specs => specs_backup}/serializable-parallel-2.spec (100%)
 rename src/test/isolation/{specs => specs_backup}/serializable-parallel-3.spec (100%)
 rename src/test/isolation/{specs => specs_backup}/serializable-parallel.spec (100%)
 rename src/test/isolation/{specs => specs_backup}/simple-write-skew.spec (100%)
 rename src/test/isolation/{specs => specs_backup}/skip-locked-2.spec (100%)
 rename src/test/isolation/{specs => specs_backup}/skip-locked-3.spec (100%)
 rename src/test/isolation/{specs => specs_backup}/skip-locked-4.spec (100%)
 rename src/test/isolation/{specs => specs_backup}/skip-locked.spec (100%)
 rename src/test/isolation/{specs => specs_backup}/stats.spec (100%)
 rename src/test/isolation/{specs => specs_backup}/subxid-overflow.spec (100%)
 rename src/test/isolation/{specs => specs_backup}/temp-schema-cleanup.spec (100%)
 rename src/test/isolation/{specs => specs_backup}/temporal-range-integrity.spec (100%)
 rename src/test/isolation/{specs => specs_backup}/timeouts.spec (100%)
 rename src/test/isolation/{specs => specs_backup}/total-cash.spec (100%)
 rename src/test/isolation/{specs => specs_backup}/truncate-conflict.spec (100%)
 rename src/test/isolation/{specs => specs_backup}/tuplelock-conflict.spec (100%)
 rename src/test/isolation/{specs => specs_backup}/tuplelock-partition.spec (100%)
 rename src/test/isolation/{specs => specs_backup}/tuplelock-update.spec (100%)
 rename src/test/isolation/{specs => specs_backup}/tuplelock-upgrade-no-deadlock.spec (100%)
 rename src/test/isolation/{specs => specs_backup}/two-ids.spec (100%)
 rename src/test/isolation/{specs => specs_backup}/update-conflict-out.spec (100%)
 rename src/test/isolation/{specs => specs_backup}/update-locked-tuple.spec (100%)
 rename src/test/isolation/{specs => specs_backup}/vacuum-concurrent-drop.spec (100%)
 rename src/test/isolation/{specs => specs_backup}/vacuum-conflict.spec (100%)
 rename src/test/isolation/{specs => specs_backup}/vacuum-no-cleanup-lock.spec (100%)
 rename src/test/isolation/{specs => specs_backup}/vacuum-skip-locked.spec (100%)

diff --git a/src/backend/replication/logical/tablesync.c b/src/backend/replication/logical/tablesync.c
index 6af5c9f..07e01e4 100644
--- a/src/backend/replication/logical/tablesync.c
+++ b/src/backend/replication/logical/tablesync.c
@@ -1129,6 +1129,34 @@ copy_table(Relation rel)
 	fetch_remote_table_info(get_namespace_name(RelationGetNamespace(rel)),
 							RelationGetRelationName(rel), &lrel, &qual,
 							&gencol_published);
+		/* Get the subscriber table schema */
+	TupleDesc tupdesc = RelationGetDescr(rel);
+	for (int i = 0; i < lrel.natts; i++)
+	{
+    /* Get column type OIDs */
+    Oid local_typid = TupleDescAttr(tupdesc, i)->atttypid;
+    Oid remote_typid = lrel.atttyps[i];
+
+    /* Get human-readable type names */
+    char *local_typname = format_type_be(local_typid);
+    char *remote_typname = format_type_be(remote_typid);
+
+    /* Check if types are different */
+    if (local_typid != remote_typid)
+    {
+        ereport(WARNING,
+                (errmsg("Datatype mismatch for column \"%s\" in table \"%s.%s\": "
+                        "Publisher type is %s, Subscriber type is %s",
+                        lrel.attnames[i], lrel.nspname, lrel.relname,
+                        remote_typname, local_typname)));
+    }
+
+    /* Free allocated memory */
+    pfree(local_typname);
+    pfree(remote_typname);
+	}
+
+					
 
 	/* Put the relation into relmap. */
 	logicalrep_relmap_update(&lrel);
diff --git a/src/test/isolation/specs/aborted-keyrevoke.spec b/src/test/isolation/specs_backup/aborted-keyrevoke.spec
similarity index 100%
rename from src/test/isolation/specs/aborted-keyrevoke.spec
rename to src/test/isolation/specs_backup/aborted-keyrevoke.spec
diff --git a/src/test/isolation/specs/alter-table-1.spec b/src/test/isolation/specs_backup/alter-table-1.spec
similarity index 100%
rename from src/test/isolation/specs/alter-table-1.spec
rename to src/test/isolation/specs_backup/alter-table-1.spec
diff --git a/src/test/isolation/specs/alter-table-2.spec b/src/test/isolation/specs_backup/alter-table-2.spec
similarity index 100%
rename from src/test/isolation/specs/alter-table-2.spec
rename to src/test/isolation/specs_backup/alter-table-2.spec
diff --git a/src/test/isolation/specs/alter-table-3.spec b/src/test/isolation/specs_backup/alter-table-3.spec
similarity index 100%
rename from src/test/isolation/specs/alter-table-3.spec
rename to src/test/isolation/specs_backup/alter-table-3.spec
diff --git a/src/test/isolation/specs/alter-table-4.spec b/src/test/isolation/specs_backup/alter-table-4.spec
similarity index 100%
rename from src/test/isolation/specs/alter-table-4.spec
rename to src/test/isolation/specs_backup/alter-table-4.spec
diff --git a/src/test/isolation/specs/async-notify.spec b/src/test/isolation/specs_backup/async-notify.spec
similarity index 100%
rename from src/test/isolation/specs/async-notify.spec
rename to src/test/isolation/specs_backup/async-notify.spec
diff --git a/src/test/isolation/specs/classroom-scheduling.spec b/src/test/isolation/specs_backup/classroom-scheduling.spec
similarity index 100%
rename from src/test/isolation/specs/classroom-scheduling.spec
rename to src/test/isolation/specs_backup/classroom-scheduling.spec
diff --git a/src/test/isolation/specs/cluster-conflict-partition.spec b/src/test/isolation/specs_backup/cluster-conflict-partition.spec
similarity index 100%
rename from src/test/isolation/specs/cluster-conflict-partition.spec
rename to src/test/isolation/specs_backup/cluster-conflict-partition.spec
diff --git a/src/test/isolation/specs/cluster-conflict.spec b/src/test/isolation/specs_backup/cluster-conflict.spec
similarity index 100%
rename from src/test/isolation/specs/cluster-conflict.spec
rename to src/test/isolation/specs_backup/cluster-conflict.spec
diff --git a/src/test/isolation/specs/create-trigger.spec b/src/test/isolation/specs_backup/create-trigger.spec
similarity index 100%
rename from src/test/isolation/specs/create-trigger.spec
rename to src/test/isolation/specs_backup/create-trigger.spec
diff --git a/src/test/isolation/specs/deadlock-hard.spec b/src/test/isolation/specs_backup/deadlock-hard.spec
similarity index 100%
rename from src/test/isolation/specs/deadlock-hard.spec
rename to src/test/isolation/specs_backup/deadlock-hard.spec
diff --git a/src/test/isolation/specs/deadlock-parallel.spec b/src/test/isolation/specs_backup/deadlock-parallel.spec
similarity index 100%
rename from src/test/isolation/specs/deadlock-parallel.spec
rename to src/test/isolation/specs_backup/deadlock-parallel.spec
diff --git a/src/test/isolation/specs/deadlock-simple.spec b/src/test/isolation/specs_backup/deadlock-simple.spec
similarity index 100%
rename from src/test/isolation/specs/deadlock-simple.spec
rename to src/test/isolation/specs_backup/deadlock-simple.spec
diff --git a/src/test/isolation/specs/deadlock-soft-2.spec b/src/test/isolation/specs_backup/deadlock-soft-2.spec
similarity index 100%
rename from src/test/isolation/specs/deadlock-soft-2.spec
rename to src/test/isolation/specs_backup/deadlock-soft-2.spec
diff --git a/src/test/isolation/specs/deadlock-soft.spec b/src/test/isolation/specs_backup/deadlock-soft.spec
similarity index 100%
rename from src/test/isolation/specs/deadlock-soft.spec
rename to src/test/isolation/specs_backup/deadlock-soft.spec
diff --git a/src/test/isolation/specs/delete-abort-savept-2.spec b/src/test/isolation/specs_backup/delete-abort-savept-2.spec
similarity index 100%
rename from src/test/isolation/specs/delete-abort-savept-2.spec
rename to src/test/isolation/specs_backup/delete-abort-savept-2.spec
diff --git a/src/test/isolation/specs/delete-abort-savept.spec b/src/test/isolation/specs_backup/delete-abort-savept.spec
similarity index 100%
rename from src/test/isolation/specs/delete-abort-savept.spec
rename to src/test/isolation/specs_backup/delete-abort-savept.spec
diff --git a/src/test/isolation/specs/detach-partition-concurrently-1.spec b/src/test/isolation/specs_backup/detach-partition-concurrently-1.spec
similarity index 100%
rename from src/test/isolation/specs/detach-partition-concurrently-1.spec
rename to src/test/isolation/specs_backup/detach-partition-concurrently-1.spec
diff --git a/src/test/isolation/specs/detach-partition-concurrently-2.spec b/src/test/isolation/specs_backup/detach-partition-concurrently-2.spec
similarity index 100%
rename from src/test/isolation/specs/detach-partition-concurrently-2.spec
rename to src/test/isolation/specs_backup/detach-partition-concurrently-2.spec
diff --git a/src/test/isolation/specs/detach-partition-concurrently-3.spec b/src/test/isolation/specs_backup/detach-partition-concurrently-3.spec
similarity index 100%
rename from src/test/isolation/specs/detach-partition-concurrently-3.spec
rename to src/test/isolation/specs_backup/detach-partition-concurrently-3.spec
diff --git a/src/test/isolation/specs/detach-partition-concurrently-4.spec b/src/test/isolation/specs_backup/detach-partition-concurrently-4.spec
similarity index 100%
rename from src/test/isolation/specs/detach-partition-concurrently-4.spec
rename to src/test/isolation/specs_backup/detach-partition-concurrently-4.spec
diff --git a/src/test/isolation/specs/drop-index-concurrently-1.spec b/src/test/isolation/specs_backup/drop-index-concurrently-1.spec
similarity index 100%
rename from src/test/isolation/specs/drop-index-concurrently-1.spec
rename to src/test/isolation/specs_backup/drop-index-concurrently-1.spec
diff --git a/src/test/isolation/specs/eval-plan-qual-trigger.spec b/src/test/isolation/specs_backup/eval-plan-qual-trigger.spec
similarity index 100%
rename from src/test/isolation/specs/eval-plan-qual-trigger.spec
rename to src/test/isolation/specs_backup/eval-plan-qual-trigger.spec
diff --git a/src/test/isolation/specs/eval-plan-qual.spec b/src/test/isolation/specs_backup/eval-plan-qual.spec
similarity index 100%
rename from src/test/isolation/specs/eval-plan-qual.spec
rename to src/test/isolation/specs_backup/eval-plan-qual.spec
diff --git a/src/test/isolation/specs/fk-contention.spec b/src/test/isolation/specs_backup/fk-contention.spec
similarity index 100%
rename from src/test/isolation/specs/fk-contention.spec
rename to src/test/isolation/specs_backup/fk-contention.spec
diff --git a/src/test/isolation/specs/fk-deadlock.spec b/src/test/isolation/specs_backup/fk-deadlock.spec
similarity index 100%
rename from src/test/isolation/specs/fk-deadlock.spec
rename to src/test/isolation/specs_backup/fk-deadlock.spec
diff --git a/src/test/isolation/specs/fk-deadlock2.spec b/src/test/isolation/specs_backup/fk-deadlock2.spec
similarity index 100%
rename from src/test/isolation/specs/fk-deadlock2.spec
rename to src/test/isolation/specs_backup/fk-deadlock2.spec
diff --git a/src/test/isolation/specs/fk-partitioned-1.spec b/src/test/isolation/specs_backup/fk-partitioned-1.spec
similarity index 100%
rename from src/test/isolation/specs/fk-partitioned-1.spec
rename to src/test/isolation/specs_backup/fk-partitioned-1.spec
diff --git a/src/test/isolation/specs/fk-partitioned-2.spec b/src/test/isolation/specs_backup/fk-partitioned-2.spec
similarity index 100%
rename from src/test/isolation/specs/fk-partitioned-2.spec
rename to src/test/isolation/specs_backup/fk-partitioned-2.spec
diff --git a/src/test/isolation/specs/fk-snapshot.spec b/src/test/isolation/specs_backup/fk-snapshot.spec
similarity index 100%
rename from src/test/isolation/specs/fk-snapshot.spec
rename to src/test/isolation/specs_backup/fk-snapshot.spec
diff --git a/src/test/isolation/specs/freeze-the-dead.spec b/src/test/isolation/specs_backup/freeze-the-dead.spec
similarity index 100%
rename from src/test/isolation/specs/freeze-the-dead.spec
rename to src/test/isolation/specs_backup/freeze-the-dead.spec
diff --git a/src/test/isolation/specs/horizons.spec b/src/test/isolation/specs_backup/horizons.spec
similarity index 100%
rename from src/test/isolation/specs/horizons.spec
rename to src/test/isolation/specs_backup/horizons.spec
diff --git a/src/test/isolation/specs/index-only-scan.spec b/src/test/isolation/specs_backup/index-only-scan.spec
similarity index 100%
rename from src/test/isolation/specs/index-only-scan.spec
rename to src/test/isolation/specs_backup/index-only-scan.spec
diff --git a/src/test/isolation/specs/inherit-temp.spec b/src/test/isolation/specs_backup/inherit-temp.spec
similarity index 100%
rename from src/test/isolation/specs/inherit-temp.spec
rename to src/test/isolation/specs_backup/inherit-temp.spec
diff --git a/src/test/isolation/specs/inplace-inval.spec b/src/test/isolation/specs_backup/inplace-inval.spec
similarity index 100%
rename from src/test/isolation/specs/inplace-inval.spec
rename to src/test/isolation/specs_backup/inplace-inval.spec
diff --git a/src/test/isolation/specs/insert-conflict-do-nothing-2.spec b/src/test/isolation/specs_backup/insert-conflict-do-nothing-2.spec
similarity index 100%
rename from src/test/isolation/specs/insert-conflict-do-nothing-2.spec
rename to src/test/isolation/specs_backup/insert-conflict-do-nothing-2.spec
diff --git a/src/test/isolation/specs/insert-conflict-do-nothing.spec b/src/test/isolation/specs_backup/insert-conflict-do-nothing.spec
similarity index 100%
rename from src/test/isolation/specs/insert-conflict-do-nothing.spec
rename to src/test/isolation/specs_backup/insert-conflict-do-nothing.spec
diff --git a/src/test/isolation/specs/insert-conflict-do-update-2.spec b/src/test/isolation/specs_backup/insert-conflict-do-update-2.spec
similarity index 100%
rename from src/test/isolation/specs/insert-conflict-do-update-2.spec
rename to src/test/isolation/specs_backup/insert-conflict-do-update-2.spec
diff --git a/src/test/isolation/specs/insert-conflict-do-update-3.spec b/src/test/isolation/specs_backup/insert-conflict-do-update-3.spec
similarity index 100%
rename from src/test/isolation/specs/insert-conflict-do-update-3.spec
rename to src/test/isolation/specs_backup/insert-conflict-do-update-3.spec
diff --git a/src/test/isolation/specs/insert-conflict-do-update.spec b/src/test/isolation/specs_backup/insert-conflict-do-update.spec
similarity index 100%
rename from src/test/isolation/specs/insert-conflict-do-update.spec
rename to src/test/isolation/specs_backup/insert-conflict-do-update.spec
diff --git a/src/test/isolation/specs/insert-conflict-specconflict.spec b/src/test/isolation/specs_backup/insert-conflict-specconflict.spec
similarity index 100%
rename from src/test/isolation/specs/insert-conflict-specconflict.spec
rename to src/test/isolation/specs_backup/insert-conflict-specconflict.spec
diff --git a/src/test/isolation/specs/intra-grant-inplace-db.spec b/src/test/isolation/specs_backup/intra-grant-inplace-db.spec
similarity index 100%
rename from src/test/isolation/specs/intra-grant-inplace-db.spec
rename to src/test/isolation/specs_backup/intra-grant-inplace-db.spec
diff --git a/src/test/isolation/specs/intra-grant-inplace.spec b/src/test/isolation/specs_backup/intra-grant-inplace.spec
similarity index 100%
rename from src/test/isolation/specs/intra-grant-inplace.spec
rename to src/test/isolation/specs_backup/intra-grant-inplace.spec
diff --git a/src/test/isolation/specs/lock-committed-keyupdate.spec b/src/test/isolation/specs_backup/lock-committed-keyupdate.spec
similarity index 100%
rename from src/test/isolation/specs/lock-committed-keyupdate.spec
rename to src/test/isolation/specs_backup/lock-committed-keyupdate.spec
diff --git a/src/test/isolation/specs/lock-committed-update.spec b/src/test/isolation/specs_backup/lock-committed-update.spec
similarity index 100%
rename from src/test/isolation/specs/lock-committed-update.spec
rename to src/test/isolation/specs_backup/lock-committed-update.spec
diff --git a/src/test/isolation/specs/lock-nowait.spec b/src/test/isolation/specs_backup/lock-nowait.spec
similarity index 100%
rename from src/test/isolation/specs/lock-nowait.spec
rename to src/test/isolation/specs_backup/lock-nowait.spec
diff --git a/src/test/isolation/specs/lock-update-delete.spec b/src/test/isolation/specs_backup/lock-update-delete.spec
similarity index 100%
rename from src/test/isolation/specs/lock-update-delete.spec
rename to src/test/isolation/specs_backup/lock-update-delete.spec
diff --git a/src/test/isolation/specs/lock-update-traversal.spec b/src/test/isolation/specs_backup/lock-update-traversal.spec
similarity index 100%
rename from src/test/isolation/specs/lock-update-traversal.spec
rename to src/test/isolation/specs_backup/lock-update-traversal.spec
diff --git a/src/test/isolation/specs/matview-write-skew.spec b/src/test/isolation/specs_backup/matview-write-skew.spec
similarity index 100%
rename from src/test/isolation/specs/matview-write-skew.spec
rename to src/test/isolation/specs_backup/matview-write-skew.spec
diff --git a/src/test/isolation/specs/merge-delete.spec b/src/test/isolation/specs_backup/merge-delete.spec
similarity index 100%
rename from src/test/isolation/specs/merge-delete.spec
rename to src/test/isolation/specs_backup/merge-delete.spec
diff --git a/src/test/isolation/specs/merge-insert-update.spec b/src/test/isolation/specs_backup/merge-insert-update.spec
similarity index 100%
rename from src/test/isolation/specs/merge-insert-update.spec
rename to src/test/isolation/specs_backup/merge-insert-update.spec
diff --git a/src/test/isolation/specs/merge-join.spec b/src/test/isolation/specs_backup/merge-join.spec
similarity index 100%
rename from src/test/isolation/specs/merge-join.spec
rename to src/test/isolation/specs_backup/merge-join.spec
diff --git a/src/test/isolation/specs/merge-match-recheck.spec b/src/test/isolation/specs_backup/merge-match-recheck.spec
similarity index 100%
rename from src/test/isolation/specs/merge-match-recheck.spec
rename to src/test/isolation/specs_backup/merge-match-recheck.spec
diff --git a/src/test/isolation/specs/merge-update.spec b/src/test/isolation/specs_backup/merge-update.spec
similarity index 100%
rename from src/test/isolation/specs/merge-update.spec
rename to src/test/isolation/specs_backup/merge-update.spec
diff --git a/src/test/isolation/specs/multiple-cic.spec b/src/test/isolation/specs_backup/multiple-cic.spec
similarity index 100%
rename from src/test/isolation/specs/multiple-cic.spec
rename to src/test/isolation/specs_backup/multiple-cic.spec
diff --git a/src/test/isolation/specs/multiple-row-versions.spec b/src/test/isolation/specs_backup/multiple-row-versions.spec
similarity index 100%
rename from src/test/isolation/specs/multiple-row-versions.spec
rename to src/test/isolation/specs_backup/multiple-row-versions.spec
diff --git a/src/test/isolation/specs/multixact-no-deadlock.spec b/src/test/isolation/specs_backup/multixact-no-deadlock.spec
similarity index 100%
rename from src/test/isolation/specs/multixact-no-deadlock.spec
rename to src/test/isolation/specs_backup/multixact-no-deadlock.spec
diff --git a/src/test/isolation/specs/multixact-no-forget.spec b/src/test/isolation/specs_backup/multixact-no-forget.spec
similarity index 100%
rename from src/test/isolation/specs/multixact-no-forget.spec
rename to src/test/isolation/specs_backup/multixact-no-forget.spec
diff --git a/src/test/isolation/specs/nowait-2.spec b/src/test/isolation/specs_backup/nowait-2.spec
similarity index 100%
rename from src/test/isolation/specs/nowait-2.spec
rename to src/test/isolation/specs_backup/nowait-2.spec
diff --git a/src/test/isolation/specs/nowait-3.spec b/src/test/isolation/specs_backup/nowait-3.spec
similarity index 100%
rename from src/test/isolation/specs/nowait-3.spec
rename to src/test/isolation/specs_backup/nowait-3.spec
diff --git a/src/test/isolation/specs/nowait-4.spec b/src/test/isolation/specs_backup/nowait-4.spec
similarity index 100%
rename from src/test/isolation/specs/nowait-4.spec
rename to src/test/isolation/specs_backup/nowait-4.spec
diff --git a/src/test/isolation/specs/nowait-5.spec b/src/test/isolation/specs_backup/nowait-5.spec
similarity index 100%
rename from src/test/isolation/specs/nowait-5.spec
rename to src/test/isolation/specs_backup/nowait-5.spec
diff --git a/src/test/isolation/specs/nowait.spec b/src/test/isolation/specs_backup/nowait.spec
similarity index 100%
rename from src/test/isolation/specs/nowait.spec
rename to src/test/isolation/specs_backup/nowait.spec
diff --git a/src/test/isolation/specs/partial-index.spec b/src/test/isolation/specs_backup/partial-index.spec
similarity index 100%
rename from src/test/isolation/specs/partial-index.spec
rename to src/test/isolation/specs_backup/partial-index.spec
diff --git a/src/test/isolation/specs/partition-concurrent-attach.spec b/src/test/isolation/specs_backup/partition-concurrent-attach.spec
similarity index 100%
rename from src/test/isolation/specs/partition-concurrent-attach.spec
rename to src/test/isolation/specs_backup/partition-concurrent-attach.spec
diff --git a/src/test/isolation/specs/partition-drop-index-locking.spec b/src/test/isolation/specs_backup/partition-drop-index-locking.spec
similarity index 100%
rename from src/test/isolation/specs/partition-drop-index-locking.spec
rename to src/test/isolation/specs_backup/partition-drop-index-locking.spec
diff --git a/src/test/isolation/specs/partition-key-update-1.spec b/src/test/isolation/specs_backup/partition-key-update-1.spec
similarity index 100%
rename from src/test/isolation/specs/partition-key-update-1.spec
rename to src/test/isolation/specs_backup/partition-key-update-1.spec
diff --git a/src/test/isolation/specs/partition-key-update-2.spec b/src/test/isolation/specs_backup/partition-key-update-2.spec
similarity index 100%
rename from src/test/isolation/specs/partition-key-update-2.spec
rename to src/test/isolation/specs_backup/partition-key-update-2.spec
diff --git a/src/test/isolation/specs/partition-key-update-3.spec b/src/test/isolation/specs_backup/partition-key-update-3.spec
similarity index 100%
rename from src/test/isolation/specs/partition-key-update-3.spec
rename to src/test/isolation/specs_backup/partition-key-update-3.spec
diff --git a/src/test/isolation/specs/partition-key-update-4.spec b/src/test/isolation/specs_backup/partition-key-update-4.spec
similarity index 100%
rename from src/test/isolation/specs/partition-key-update-4.spec
rename to src/test/isolation/specs_backup/partition-key-update-4.spec
diff --git a/src/test/isolation/specs/plpgsql-toast.spec b/src/test/isolation/specs_backup/plpgsql-toast.spec
similarity index 100%
rename from src/test/isolation/specs/plpgsql-toast.spec
rename to src/test/isolation/specs_backup/plpgsql-toast.spec
diff --git a/src/test/isolation/specs/predicate-gin.spec b/src/test/isolation/specs_backup/predicate-gin.spec
similarity index 100%
rename from src/test/isolation/specs/predicate-gin.spec
rename to src/test/isolation/specs_backup/predicate-gin.spec
diff --git a/src/test/isolation/specs/predicate-gist.spec b/src/test/isolation/specs_backup/predicate-gist.spec
similarity index 100%
rename from src/test/isolation/specs/predicate-gist.spec
rename to src/test/isolation/specs_backup/predicate-gist.spec
diff --git a/src/test/isolation/specs/predicate-hash.spec b/src/test/isolation/specs_backup/predicate-hash.spec
similarity index 100%
rename from src/test/isolation/specs/predicate-hash.spec
rename to src/test/isolation/specs_backup/predicate-hash.spec
diff --git a/src/test/isolation/specs/predicate-lock-hot-tuple.spec b/src/test/isolation/specs_backup/predicate-lock-hot-tuple.spec
similarity index 100%
rename from src/test/isolation/specs/predicate-lock-hot-tuple.spec
rename to src/test/isolation/specs_backup/predicate-lock-hot-tuple.spec
diff --git a/src/test/isolation/specs/prepared-transactions-cic.spec b/src/test/isolation/specs_backup/prepared-transactions-cic.spec
similarity index 100%
rename from src/test/isolation/specs/prepared-transactions-cic.spec
rename to src/test/isolation/specs_backup/prepared-transactions-cic.spec
diff --git a/src/test/isolation/specs/prepared-transactions.spec b/src/test/isolation/specs_backup/prepared-transactions.spec
similarity index 100%
rename from src/test/isolation/specs/prepared-transactions.spec
rename to src/test/isolation/specs_backup/prepared-transactions.spec
diff --git a/src/test/isolation/specs/project-manager.spec b/src/test/isolation/specs_backup/project-manager.spec
similarity index 100%
rename from src/test/isolation/specs/project-manager.spec
rename to src/test/isolation/specs_backup/project-manager.spec
diff --git a/src/test/isolation/specs/propagate-lock-delete.spec b/src/test/isolation/specs_backup/propagate-lock-delete.spec
similarity index 100%
rename from src/test/isolation/specs/propagate-lock-delete.spec
rename to src/test/isolation/specs_backup/propagate-lock-delete.spec
diff --git a/src/test/isolation/specs/read-only-anomaly-2.spec b/src/test/isolation/specs_backup/read-only-anomaly-2.spec
similarity index 100%
rename from src/test/isolation/specs/read-only-anomaly-2.spec
rename to src/test/isolation/specs_backup/read-only-anomaly-2.spec
diff --git a/src/test/isolation/specs/read-only-anomaly-3.spec b/src/test/isolation/specs_backup/read-only-anomaly-3.spec
similarity index 100%
rename from src/test/isolation/specs/read-only-anomaly-3.spec
rename to src/test/isolation/specs_backup/read-only-anomaly-3.spec
diff --git a/src/test/isolation/specs/read-only-anomaly.spec b/src/test/isolation/specs_backup/read-only-anomaly.spec
similarity index 100%
rename from src/test/isolation/specs/read-only-anomaly.spec
rename to src/test/isolation/specs_backup/read-only-anomaly.spec
diff --git a/src/test/isolation/specs/read-write-unique-2.spec b/src/test/isolation/specs_backup/read-write-unique-2.spec
similarity index 100%
rename from src/test/isolation/specs/read-write-unique-2.spec
rename to src/test/isolation/specs_backup/read-write-unique-2.spec
diff --git a/src/test/isolation/specs/read-write-unique-3.spec b/src/test/isolation/specs_backup/read-write-unique-3.spec
similarity index 100%
rename from src/test/isolation/specs/read-write-unique-3.spec
rename to src/test/isolation/specs_backup/read-write-unique-3.spec
diff --git a/src/test/isolation/specs/read-write-unique-4.spec b/src/test/isolation/specs_backup/read-write-unique-4.spec
similarity index 100%
rename from src/test/isolation/specs/read-write-unique-4.spec
rename to src/test/isolation/specs_backup/read-write-unique-4.spec
diff --git a/src/test/isolation/specs/read-write-unique.spec b/src/test/isolation/specs_backup/read-write-unique.spec
similarity index 100%
rename from src/test/isolation/specs/read-write-unique.spec
rename to src/test/isolation/specs_backup/read-write-unique.spec
diff --git a/src/test/isolation/specs/receipt-report.spec b/src/test/isolation/specs_backup/receipt-report.spec
similarity index 100%
rename from src/test/isolation/specs/receipt-report.spec
rename to src/test/isolation/specs_backup/receipt-report.spec
diff --git a/src/test/isolation/specs/referential-integrity.spec b/src/test/isolation/specs_backup/referential-integrity.spec
similarity index 100%
rename from src/test/isolation/specs/referential-integrity.spec
rename to src/test/isolation/specs_backup/referential-integrity.spec
diff --git a/src/test/isolation/specs/reindex-concurrently-toast.spec b/src/test/isolation/specs_backup/reindex-concurrently-toast.spec
similarity index 100%
rename from src/test/isolation/specs/reindex-concurrently-toast.spec
rename to src/test/isolation/specs_backup/reindex-concurrently-toast.spec
diff --git a/src/test/isolation/specs/reindex-concurrently.spec b/src/test/isolation/specs_backup/reindex-concurrently.spec
similarity index 100%
rename from src/test/isolation/specs/reindex-concurrently.spec
rename to src/test/isolation/specs_backup/reindex-concurrently.spec
diff --git a/src/test/isolation/specs/reindex-schema.spec b/src/test/isolation/specs_backup/reindex-schema.spec
similarity index 100%
rename from src/test/isolation/specs/reindex-schema.spec
rename to src/test/isolation/specs_backup/reindex-schema.spec
diff --git a/src/test/isolation/specs/ri-trigger.spec b/src/test/isolation/specs_backup/ri-trigger.spec
similarity index 100%
rename from src/test/isolation/specs/ri-trigger.spec
rename to src/test/isolation/specs_backup/ri-trigger.spec
diff --git a/src/test/isolation/specs/sequence-ddl.spec b/src/test/isolation/specs_backup/sequence-ddl.spec
similarity index 100%
rename from src/test/isolation/specs/sequence-ddl.spec
rename to src/test/isolation/specs_backup/sequence-ddl.spec
diff --git a/src/test/isolation/specs/serializable-parallel-2.spec b/src/test/isolation/specs_backup/serializable-parallel-2.spec
similarity index 100%
rename from src/test/isolation/specs/serializable-parallel-2.spec
rename to src/test/isolation/specs_backup/serializable-parallel-2.spec
diff --git a/src/test/isolation/specs/serializable-parallel-3.spec b/src/test/isolation/specs_backup/serializable-parallel-3.spec
similarity index 100%
rename from src/test/isolation/specs/serializable-parallel-3.spec
rename to src/test/isolation/specs_backup/serializable-parallel-3.spec
diff --git a/src/test/isolation/specs/serializable-parallel.spec b/src/test/isolation/specs_backup/serializable-parallel.spec
similarity index 100%
rename from src/test/isolation/specs/serializable-parallel.spec
rename to src/test/isolation/specs_backup/serializable-parallel.spec
diff --git a/src/test/isolation/specs/simple-write-skew.spec b/src/test/isolation/specs_backup/simple-write-skew.spec
similarity index 100%
rename from src/test/isolation/specs/simple-write-skew.spec
rename to src/test/isolation/specs_backup/simple-write-skew.spec
diff --git a/src/test/isolation/specs/skip-locked-2.spec b/src/test/isolation/specs_backup/skip-locked-2.spec
similarity index 100%
rename from src/test/isolation/specs/skip-locked-2.spec
rename to src/test/isolation/specs_backup/skip-locked-2.spec
diff --git a/src/test/isolation/specs/skip-locked-3.spec b/src/test/isolation/specs_backup/skip-locked-3.spec
similarity index 100%
rename from src/test/isolation/specs/skip-locked-3.spec
rename to src/test/isolation/specs_backup/skip-locked-3.spec
diff --git a/src/test/isolation/specs/skip-locked-4.spec b/src/test/isolation/specs_backup/skip-locked-4.spec
similarity index 100%
rename from src/test/isolation/specs/skip-locked-4.spec
rename to src/test/isolation/specs_backup/skip-locked-4.spec
diff --git a/src/test/isolation/specs/skip-locked.spec b/src/test/isolation/specs_backup/skip-locked.spec
similarity index 100%
rename from src/test/isolation/specs/skip-locked.spec
rename to src/test/isolation/specs_backup/skip-locked.spec
diff --git a/src/test/isolation/specs/stats.spec b/src/test/isolation/specs_backup/stats.spec
similarity index 100%
rename from src/test/isolation/specs/stats.spec
rename to src/test/isolation/specs_backup/stats.spec
diff --git a/src/test/isolation/specs/subxid-overflow.spec b/src/test/isolation/specs_backup/subxid-overflow.spec
similarity index 100%
rename from src/test/isolation/specs/subxid-overflow.spec
rename to src/test/isolation/specs_backup/subxid-overflow.spec
diff --git a/src/test/isolation/specs/temp-schema-cleanup.spec b/src/test/isolation/specs_backup/temp-schema-cleanup.spec
similarity index 100%
rename from src/test/isolation/specs/temp-schema-cleanup.spec
rename to src/test/isolation/specs_backup/temp-schema-cleanup.spec
diff --git a/src/test/isolation/specs/temporal-range-integrity.spec b/src/test/isolation/specs_backup/temporal-range-integrity.spec
similarity index 100%
rename from src/test/isolation/specs/temporal-range-integrity.spec
rename to src/test/isolation/specs_backup/temporal-range-integrity.spec
diff --git a/src/test/isolation/specs/timeouts.spec b/src/test/isolation/specs_backup/timeouts.spec
similarity index 100%
rename from src/test/isolation/specs/timeouts.spec
rename to src/test/isolation/specs_backup/timeouts.spec
diff --git a/src/test/isolation/specs/total-cash.spec b/src/test/isolation/specs_backup/total-cash.spec
similarity index 100%
rename from src/test/isolation/specs/total-cash.spec
rename to src/test/isolation/specs_backup/total-cash.spec
diff --git a/src/test/isolation/specs/truncate-conflict.spec b/src/test/isolation/specs_backup/truncate-conflict.spec
similarity index 100%
rename from src/test/isolation/specs/truncate-conflict.spec
rename to src/test/isolation/specs_backup/truncate-conflict.spec
diff --git a/src/test/isolation/specs/tuplelock-conflict.spec b/src/test/isolation/specs_backup/tuplelock-conflict.spec
similarity index 100%
rename from src/test/isolation/specs/tuplelock-conflict.spec
rename to src/test/isolation/specs_backup/tuplelock-conflict.spec
diff --git a/src/test/isolation/specs/tuplelock-partition.spec b/src/test/isolation/specs_backup/tuplelock-partition.spec
similarity index 100%
rename from src/test/isolation/specs/tuplelock-partition.spec
rename to src/test/isolation/specs_backup/tuplelock-partition.spec
diff --git a/src/test/isolation/specs/tuplelock-update.spec b/src/test/isolation/specs_backup/tuplelock-update.spec
similarity index 100%
rename from src/test/isolation/specs/tuplelock-update.spec
rename to src/test/isolation/specs_backup/tuplelock-update.spec
diff --git a/src/test/isolation/specs/tuplelock-upgrade-no-deadlock.spec b/src/test/isolation/specs_backup/tuplelock-upgrade-no-deadlock.spec
similarity index 100%
rename from src/test/isolation/specs/tuplelock-upgrade-no-deadlock.spec
rename to src/test/isolation/specs_backup/tuplelock-upgrade-no-deadlock.spec
diff --git a/src/test/isolation/specs/two-ids.spec b/src/test/isolation/specs_backup/two-ids.spec
similarity index 100%
rename from src/test/isolation/specs/two-ids.spec
rename to src/test/isolation/specs_backup/two-ids.spec
diff --git a/src/test/isolation/specs/update-conflict-out.spec b/src/test/isolation/specs_backup/update-conflict-out.spec
similarity index 100%
rename from src/test/isolation/specs/update-conflict-out.spec
rename to src/test/isolation/specs_backup/update-conflict-out.spec
diff --git a/src/test/isolation/specs/update-locked-tuple.spec b/src/test/isolation/specs_backup/update-locked-tuple.spec
similarity index 100%
rename from src/test/isolation/specs/update-locked-tuple.spec
rename to src/test/isolation/specs_backup/update-locked-tuple.spec
diff --git a/src/test/isolation/specs/vacuum-concurrent-drop.spec b/src/test/isolation/specs_backup/vacuum-concurrent-drop.spec
similarity index 100%
rename from src/test/isolation/specs/vacuum-concurrent-drop.spec
rename to src/test/isolation/specs_backup/vacuum-concurrent-drop.spec
diff --git a/src/test/isolation/specs/vacuum-conflict.spec b/src/test/isolation/specs_backup/vacuum-conflict.spec
similarity index 100%
rename from src/test/isolation/specs/vacuum-conflict.spec
rename to src/test/isolation/specs_backup/vacuum-conflict.spec
diff --git a/src/test/isolation/specs/vacuum-no-cleanup-lock.spec b/src/test/isolation/specs_backup/vacuum-no-cleanup-lock.spec
similarity index 100%
rename from src/test/isolation/specs/vacuum-no-cleanup-lock.spec
rename to src/test/isolation/specs_backup/vacuum-no-cleanup-lock.spec
diff --git a/src/test/isolation/specs/vacuum-skip-locked.spec b/src/test/isolation/specs_backup/vacuum-skip-locked.spec
similarity index 100%
rename from src/test/isolation/specs/vacuum-skip-locked.spec
rename to src/test/isolation/specs_backup/vacuum-skip-locked.spec
-- 
2.43.0

#2BharatDB
bharatdbpg@gmail.com
In reply to: BharatDB (#1)
1 attachment(s)
Fwd: Test mail for pgsql-hackers

---------- Forwarded message ---------
From: BharatDB <bharatdbpg@gmail.com>
Date: Tue, Mar 11, 2025 at 6:03 PM
Subject: Re: Test mail for pgsql-hackers
To: pgsql-hackers Owner <pgsql-hackers-owner@lists.postgresql.org>, <
pgsql-hackers@lists.postgresql.org>, <pgsql-hackers@postgresql.org>

Hi ,

I’ve been exploring logical replication and noticed that if the column
datatypes don’t match between the publisher and subscriber, PostgreSQL
doesn’t give a warning. This can cause unexpected behavior, and I thought
it might be helpful to alert users when this happens.

### **What This Patch Does:**

- Adds a warning when a column's datatype in the subscriber doesn’t match
the publisher.

- Helps users catch issues early instead of running into silent errors

Show quoted text

later.

Why I Think It’s Useful:- Avoids confusion when replication doesn’t work
as expected. - Makes debugging easier by pointing out potential problems.
I’d love to get feedback on whether this is a good idea and if I’ve
approached it correctly. Since I’m still learning, any suggestions for
improvement would be really helpful. I’ve attached the patch—please let me
know what you think!

Thanks, Blessy

Attachments:

Datatype_mismatch_logicalreplication_.patchapplication/x-patch; name=Datatype_mismatch_logicalreplication_.patchDownload
From 418a9e40f2b98dfef99eb4c79e87490e192969c2 Mon Sep 17 00:00:00 2001
From: Blessy456b <blessy456bthomas@gmail.com>
Date: Tue, 11 Mar 2025 17:20:43 +0530
Subject: [PATCH] Added logical replication warning

---
 src/backend/replication/logical/tablesync.c   | 28 +++++++++++++++++++
 .../aborted-keyrevoke.spec                    |  0
 .../alter-table-1.spec                        |  0
 .../alter-table-2.spec                        |  0
 .../alter-table-3.spec                        |  0
 .../alter-table-4.spec                        |  0
 .../{specs => specs_backup}/async-notify.spec |  0
 .../classroom-scheduling.spec                 |  0
 .../cluster-conflict-partition.spec           |  0
 .../cluster-conflict.spec                     |  0
 .../create-trigger.spec                       |  0
 .../deadlock-hard.spec                        |  0
 .../deadlock-parallel.spec                    |  0
 .../deadlock-simple.spec                      |  0
 .../deadlock-soft-2.spec                      |  0
 .../deadlock-soft.spec                        |  0
 .../delete-abort-savept-2.spec                |  0
 .../delete-abort-savept.spec                  |  0
 .../detach-partition-concurrently-1.spec      |  0
 .../detach-partition-concurrently-2.spec      |  0
 .../detach-partition-concurrently-3.spec      |  0
 .../detach-partition-concurrently-4.spec      |  0
 .../drop-index-concurrently-1.spec            |  0
 .../eval-plan-qual-trigger.spec               |  0
 .../eval-plan-qual.spec                       |  0
 .../fk-contention.spec                        |  0
 .../{specs => specs_backup}/fk-deadlock.spec  |  0
 .../{specs => specs_backup}/fk-deadlock2.spec |  0
 .../fk-partitioned-1.spec                     |  0
 .../fk-partitioned-2.spec                     |  0
 .../{specs => specs_backup}/fk-snapshot.spec  |  0
 .../freeze-the-dead.spec                      |  0
 .../{specs => specs_backup}/horizons.spec     |  0
 .../index-only-scan.spec                      |  0
 .../{specs => specs_backup}/inherit-temp.spec |  0
 .../inplace-inval.spec                        |  0
 .../insert-conflict-do-nothing-2.spec         |  0
 .../insert-conflict-do-nothing.spec           |  0
 .../insert-conflict-do-update-2.spec          |  0
 .../insert-conflict-do-update-3.spec          |  0
 .../insert-conflict-do-update.spec            |  0
 .../insert-conflict-specconflict.spec         |  0
 .../intra-grant-inplace-db.spec               |  0
 .../intra-grant-inplace.spec                  |  0
 .../lock-committed-keyupdate.spec             |  0
 .../lock-committed-update.spec                |  0
 .../{specs => specs_backup}/lock-nowait.spec  |  0
 .../lock-update-delete.spec                   |  0
 .../lock-update-traversal.spec                |  0
 .../matview-write-skew.spec                   |  0
 .../{specs => specs_backup}/merge-delete.spec |  0
 .../merge-insert-update.spec                  |  0
 .../{specs => specs_backup}/merge-join.spec   |  0
 .../merge-match-recheck.spec                  |  0
 .../{specs => specs_backup}/merge-update.spec |  0
 .../{specs => specs_backup}/multiple-cic.spec |  0
 .../multiple-row-versions.spec                |  0
 .../multixact-no-deadlock.spec                |  0
 .../multixact-no-forget.spec                  |  0
 .../{specs => specs_backup}/nowait-2.spec     |  0
 .../{specs => specs_backup}/nowait-3.spec     |  0
 .../{specs => specs_backup}/nowait-4.spec     |  0
 .../{specs => specs_backup}/nowait-5.spec     |  0
 .../{specs => specs_backup}/nowait.spec       |  0
 .../partial-index.spec                        |  0
 .../partition-concurrent-attach.spec          |  0
 .../partition-drop-index-locking.spec         |  0
 .../partition-key-update-1.spec               |  0
 .../partition-key-update-2.spec               |  0
 .../partition-key-update-3.spec               |  0
 .../partition-key-update-4.spec               |  0
 .../plpgsql-toast.spec                        |  0
 .../predicate-gin.spec                        |  0
 .../predicate-gist.spec                       |  0
 .../predicate-hash.spec                       |  0
 .../predicate-lock-hot-tuple.spec             |  0
 .../prepared-transactions-cic.spec            |  0
 .../prepared-transactions.spec                |  0
 .../project-manager.spec                      |  0
 .../propagate-lock-delete.spec                |  0
 .../read-only-anomaly-2.spec                  |  0
 .../read-only-anomaly-3.spec                  |  0
 .../read-only-anomaly.spec                    |  0
 .../read-write-unique-2.spec                  |  0
 .../read-write-unique-3.spec                  |  0
 .../read-write-unique-4.spec                  |  0
 .../read-write-unique.spec                    |  0
 .../receipt-report.spec                       |  0
 .../referential-integrity.spec                |  0
 .../reindex-concurrently-toast.spec           |  0
 .../reindex-concurrently.spec                 |  0
 .../reindex-schema.spec                       |  0
 .../{specs => specs_backup}/ri-trigger.spec   |  0
 .../{specs => specs_backup}/sequence-ddl.spec |  0
 .../serializable-parallel-2.spec              |  0
 .../serializable-parallel-3.spec              |  0
 .../serializable-parallel.spec                |  0
 .../simple-write-skew.spec                    |  0
 .../skip-locked-2.spec                        |  0
 .../skip-locked-3.spec                        |  0
 .../skip-locked-4.spec                        |  0
 .../{specs => specs_backup}/skip-locked.spec  |  0
 .../{specs => specs_backup}/stats.spec        |  0
 .../subxid-overflow.spec                      |  0
 .../temp-schema-cleanup.spec                  |  0
 .../temporal-range-integrity.spec             |  0
 .../{specs => specs_backup}/timeouts.spec     |  0
 .../{specs => specs_backup}/total-cash.spec   |  0
 .../truncate-conflict.spec                    |  0
 .../tuplelock-conflict.spec                   |  0
 .../tuplelock-partition.spec                  |  0
 .../tuplelock-update.spec                     |  0
 .../tuplelock-upgrade-no-deadlock.spec        |  0
 .../{specs => specs_backup}/two-ids.spec      |  0
 .../update-conflict-out.spec                  |  0
 .../update-locked-tuple.spec                  |  0
 .../vacuum-concurrent-drop.spec               |  0
 .../vacuum-conflict.spec                      |  0
 .../vacuum-no-cleanup-lock.spec               |  0
 .../vacuum-skip-locked.spec                   |  0
 120 files changed, 28 insertions(+)
 rename src/test/isolation/{specs => specs_backup}/aborted-keyrevoke.spec (100%)
 rename src/test/isolation/{specs => specs_backup}/alter-table-1.spec (100%)
 rename src/test/isolation/{specs => specs_backup}/alter-table-2.spec (100%)
 rename src/test/isolation/{specs => specs_backup}/alter-table-3.spec (100%)
 rename src/test/isolation/{specs => specs_backup}/alter-table-4.spec (100%)
 rename src/test/isolation/{specs => specs_backup}/async-notify.spec (100%)
 rename src/test/isolation/{specs => specs_backup}/classroom-scheduling.spec (100%)
 rename src/test/isolation/{specs => specs_backup}/cluster-conflict-partition.spec (100%)
 rename src/test/isolation/{specs => specs_backup}/cluster-conflict.spec (100%)
 rename src/test/isolation/{specs => specs_backup}/create-trigger.spec (100%)
 rename src/test/isolation/{specs => specs_backup}/deadlock-hard.spec (100%)
 rename src/test/isolation/{specs => specs_backup}/deadlock-parallel.spec (100%)
 rename src/test/isolation/{specs => specs_backup}/deadlock-simple.spec (100%)
 rename src/test/isolation/{specs => specs_backup}/deadlock-soft-2.spec (100%)
 rename src/test/isolation/{specs => specs_backup}/deadlock-soft.spec (100%)
 rename src/test/isolation/{specs => specs_backup}/delete-abort-savept-2.spec (100%)
 rename src/test/isolation/{specs => specs_backup}/delete-abort-savept.spec (100%)
 rename src/test/isolation/{specs => specs_backup}/detach-partition-concurrently-1.spec (100%)
 rename src/test/isolation/{specs => specs_backup}/detach-partition-concurrently-2.spec (100%)
 rename src/test/isolation/{specs => specs_backup}/detach-partition-concurrently-3.spec (100%)
 rename src/test/isolation/{specs => specs_backup}/detach-partition-concurrently-4.spec (100%)
 rename src/test/isolation/{specs => specs_backup}/drop-index-concurrently-1.spec (100%)
 rename src/test/isolation/{specs => specs_backup}/eval-plan-qual-trigger.spec (100%)
 rename src/test/isolation/{specs => specs_backup}/eval-plan-qual.spec (100%)
 rename src/test/isolation/{specs => specs_backup}/fk-contention.spec (100%)
 rename src/test/isolation/{specs => specs_backup}/fk-deadlock.spec (100%)
 rename src/test/isolation/{specs => specs_backup}/fk-deadlock2.spec (100%)
 rename src/test/isolation/{specs => specs_backup}/fk-partitioned-1.spec (100%)
 rename src/test/isolation/{specs => specs_backup}/fk-partitioned-2.spec (100%)
 rename src/test/isolation/{specs => specs_backup}/fk-snapshot.spec (100%)
 rename src/test/isolation/{specs => specs_backup}/freeze-the-dead.spec (100%)
 rename src/test/isolation/{specs => specs_backup}/horizons.spec (100%)
 rename src/test/isolation/{specs => specs_backup}/index-only-scan.spec (100%)
 rename src/test/isolation/{specs => specs_backup}/inherit-temp.spec (100%)
 rename src/test/isolation/{specs => specs_backup}/inplace-inval.spec (100%)
 rename src/test/isolation/{specs => specs_backup}/insert-conflict-do-nothing-2.spec (100%)
 rename src/test/isolation/{specs => specs_backup}/insert-conflict-do-nothing.spec (100%)
 rename src/test/isolation/{specs => specs_backup}/insert-conflict-do-update-2.spec (100%)
 rename src/test/isolation/{specs => specs_backup}/insert-conflict-do-update-3.spec (100%)
 rename src/test/isolation/{specs => specs_backup}/insert-conflict-do-update.spec (100%)
 rename src/test/isolation/{specs => specs_backup}/insert-conflict-specconflict.spec (100%)
 rename src/test/isolation/{specs => specs_backup}/intra-grant-inplace-db.spec (100%)
 rename src/test/isolation/{specs => specs_backup}/intra-grant-inplace.spec (100%)
 rename src/test/isolation/{specs => specs_backup}/lock-committed-keyupdate.spec (100%)
 rename src/test/isolation/{specs => specs_backup}/lock-committed-update.spec (100%)
 rename src/test/isolation/{specs => specs_backup}/lock-nowait.spec (100%)
 rename src/test/isolation/{specs => specs_backup}/lock-update-delete.spec (100%)
 rename src/test/isolation/{specs => specs_backup}/lock-update-traversal.spec (100%)
 rename src/test/isolation/{specs => specs_backup}/matview-write-skew.spec (100%)
 rename src/test/isolation/{specs => specs_backup}/merge-delete.spec (100%)
 rename src/test/isolation/{specs => specs_backup}/merge-insert-update.spec (100%)
 rename src/test/isolation/{specs => specs_backup}/merge-join.spec (100%)
 rename src/test/isolation/{specs => specs_backup}/merge-match-recheck.spec (100%)
 rename src/test/isolation/{specs => specs_backup}/merge-update.spec (100%)
 rename src/test/isolation/{specs => specs_backup}/multiple-cic.spec (100%)
 rename src/test/isolation/{specs => specs_backup}/multiple-row-versions.spec (100%)
 rename src/test/isolation/{specs => specs_backup}/multixact-no-deadlock.spec (100%)
 rename src/test/isolation/{specs => specs_backup}/multixact-no-forget.spec (100%)
 rename src/test/isolation/{specs => specs_backup}/nowait-2.spec (100%)
 rename src/test/isolation/{specs => specs_backup}/nowait-3.spec (100%)
 rename src/test/isolation/{specs => specs_backup}/nowait-4.spec (100%)
 rename src/test/isolation/{specs => specs_backup}/nowait-5.spec (100%)
 rename src/test/isolation/{specs => specs_backup}/nowait.spec (100%)
 rename src/test/isolation/{specs => specs_backup}/partial-index.spec (100%)
 rename src/test/isolation/{specs => specs_backup}/partition-concurrent-attach.spec (100%)
 rename src/test/isolation/{specs => specs_backup}/partition-drop-index-locking.spec (100%)
 rename src/test/isolation/{specs => specs_backup}/partition-key-update-1.spec (100%)
 rename src/test/isolation/{specs => specs_backup}/partition-key-update-2.spec (100%)
 rename src/test/isolation/{specs => specs_backup}/partition-key-update-3.spec (100%)
 rename src/test/isolation/{specs => specs_backup}/partition-key-update-4.spec (100%)
 rename src/test/isolation/{specs => specs_backup}/plpgsql-toast.spec (100%)
 rename src/test/isolation/{specs => specs_backup}/predicate-gin.spec (100%)
 rename src/test/isolation/{specs => specs_backup}/predicate-gist.spec (100%)
 rename src/test/isolation/{specs => specs_backup}/predicate-hash.spec (100%)
 rename src/test/isolation/{specs => specs_backup}/predicate-lock-hot-tuple.spec (100%)
 rename src/test/isolation/{specs => specs_backup}/prepared-transactions-cic.spec (100%)
 rename src/test/isolation/{specs => specs_backup}/prepared-transactions.spec (100%)
 rename src/test/isolation/{specs => specs_backup}/project-manager.spec (100%)
 rename src/test/isolation/{specs => specs_backup}/propagate-lock-delete.spec (100%)
 rename src/test/isolation/{specs => specs_backup}/read-only-anomaly-2.spec (100%)
 rename src/test/isolation/{specs => specs_backup}/read-only-anomaly-3.spec (100%)
 rename src/test/isolation/{specs => specs_backup}/read-only-anomaly.spec (100%)
 rename src/test/isolation/{specs => specs_backup}/read-write-unique-2.spec (100%)
 rename src/test/isolation/{specs => specs_backup}/read-write-unique-3.spec (100%)
 rename src/test/isolation/{specs => specs_backup}/read-write-unique-4.spec (100%)
 rename src/test/isolation/{specs => specs_backup}/read-write-unique.spec (100%)
 rename src/test/isolation/{specs => specs_backup}/receipt-report.spec (100%)
 rename src/test/isolation/{specs => specs_backup}/referential-integrity.spec (100%)
 rename src/test/isolation/{specs => specs_backup}/reindex-concurrently-toast.spec (100%)
 rename src/test/isolation/{specs => specs_backup}/reindex-concurrently.spec (100%)
 rename src/test/isolation/{specs => specs_backup}/reindex-schema.spec (100%)
 rename src/test/isolation/{specs => specs_backup}/ri-trigger.spec (100%)
 rename src/test/isolation/{specs => specs_backup}/sequence-ddl.spec (100%)
 rename src/test/isolation/{specs => specs_backup}/serializable-parallel-2.spec (100%)
 rename src/test/isolation/{specs => specs_backup}/serializable-parallel-3.spec (100%)
 rename src/test/isolation/{specs => specs_backup}/serializable-parallel.spec (100%)
 rename src/test/isolation/{specs => specs_backup}/simple-write-skew.spec (100%)
 rename src/test/isolation/{specs => specs_backup}/skip-locked-2.spec (100%)
 rename src/test/isolation/{specs => specs_backup}/skip-locked-3.spec (100%)
 rename src/test/isolation/{specs => specs_backup}/skip-locked-4.spec (100%)
 rename src/test/isolation/{specs => specs_backup}/skip-locked.spec (100%)
 rename src/test/isolation/{specs => specs_backup}/stats.spec (100%)
 rename src/test/isolation/{specs => specs_backup}/subxid-overflow.spec (100%)
 rename src/test/isolation/{specs => specs_backup}/temp-schema-cleanup.spec (100%)
 rename src/test/isolation/{specs => specs_backup}/temporal-range-integrity.spec (100%)
 rename src/test/isolation/{specs => specs_backup}/timeouts.spec (100%)
 rename src/test/isolation/{specs => specs_backup}/total-cash.spec (100%)
 rename src/test/isolation/{specs => specs_backup}/truncate-conflict.spec (100%)
 rename src/test/isolation/{specs => specs_backup}/tuplelock-conflict.spec (100%)
 rename src/test/isolation/{specs => specs_backup}/tuplelock-partition.spec (100%)
 rename src/test/isolation/{specs => specs_backup}/tuplelock-update.spec (100%)
 rename src/test/isolation/{specs => specs_backup}/tuplelock-upgrade-no-deadlock.spec (100%)
 rename src/test/isolation/{specs => specs_backup}/two-ids.spec (100%)
 rename src/test/isolation/{specs => specs_backup}/update-conflict-out.spec (100%)
 rename src/test/isolation/{specs => specs_backup}/update-locked-tuple.spec (100%)
 rename src/test/isolation/{specs => specs_backup}/vacuum-concurrent-drop.spec (100%)
 rename src/test/isolation/{specs => specs_backup}/vacuum-conflict.spec (100%)
 rename src/test/isolation/{specs => specs_backup}/vacuum-no-cleanup-lock.spec (100%)
 rename src/test/isolation/{specs => specs_backup}/vacuum-skip-locked.spec (100%)

diff --git a/src/backend/replication/logical/tablesync.c b/src/backend/replication/logical/tablesync.c
index 6af5c9f..07e01e4 100644
--- a/src/backend/replication/logical/tablesync.c
+++ b/src/backend/replication/logical/tablesync.c
@@ -1129,6 +1129,34 @@ copy_table(Relation rel)
 	fetch_remote_table_info(get_namespace_name(RelationGetNamespace(rel)),
 							RelationGetRelationName(rel), &lrel, &qual,
 							&gencol_published);
+		/* Get the subscriber table schema */
+	TupleDesc tupdesc = RelationGetDescr(rel);
+	for (int i = 0; i < lrel.natts; i++)
+	{
+    /* Get column type OIDs */
+    Oid local_typid = TupleDescAttr(tupdesc, i)->atttypid;
+    Oid remote_typid = lrel.atttyps[i];
+
+    /* Get human-readable type names */
+    char *local_typname = format_type_be(local_typid);
+    char *remote_typname = format_type_be(remote_typid);
+
+    /* Check if types are different */
+    if (local_typid != remote_typid)
+    {
+        ereport(WARNING,
+                (errmsg("Datatype mismatch for column \"%s\" in table \"%s.%s\": "
+                        "Publisher type is %s, Subscriber type is %s",
+                        lrel.attnames[i], lrel.nspname, lrel.relname,
+                        remote_typname, local_typname)));
+    }
+
+    /* Free allocated memory */
+    pfree(local_typname);
+    pfree(remote_typname);
+	}
+
+					
 
 	/* Put the relation into relmap. */
 	logicalrep_relmap_update(&lrel);
diff --git a/src/test/isolation/specs/aborted-keyrevoke.spec b/src/test/isolation/specs_backup/aborted-keyrevoke.spec
similarity index 100%
rename from src/test/isolation/specs/aborted-keyrevoke.spec
rename to src/test/isolation/specs_backup/aborted-keyrevoke.spec
diff --git a/src/test/isolation/specs/alter-table-1.spec b/src/test/isolation/specs_backup/alter-table-1.spec
similarity index 100%
rename from src/test/isolation/specs/alter-table-1.spec
rename to src/test/isolation/specs_backup/alter-table-1.spec
diff --git a/src/test/isolation/specs/alter-table-2.spec b/src/test/isolation/specs_backup/alter-table-2.spec
similarity index 100%
rename from src/test/isolation/specs/alter-table-2.spec
rename to src/test/isolation/specs_backup/alter-table-2.spec
diff --git a/src/test/isolation/specs/alter-table-3.spec b/src/test/isolation/specs_backup/alter-table-3.spec
similarity index 100%
rename from src/test/isolation/specs/alter-table-3.spec
rename to src/test/isolation/specs_backup/alter-table-3.spec
diff --git a/src/test/isolation/specs/alter-table-4.spec b/src/test/isolation/specs_backup/alter-table-4.spec
similarity index 100%
rename from src/test/isolation/specs/alter-table-4.spec
rename to src/test/isolation/specs_backup/alter-table-4.spec
diff --git a/src/test/isolation/specs/async-notify.spec b/src/test/isolation/specs_backup/async-notify.spec
similarity index 100%
rename from src/test/isolation/specs/async-notify.spec
rename to src/test/isolation/specs_backup/async-notify.spec
diff --git a/src/test/isolation/specs/classroom-scheduling.spec b/src/test/isolation/specs_backup/classroom-scheduling.spec
similarity index 100%
rename from src/test/isolation/specs/classroom-scheduling.spec
rename to src/test/isolation/specs_backup/classroom-scheduling.spec
diff --git a/src/test/isolation/specs/cluster-conflict-partition.spec b/src/test/isolation/specs_backup/cluster-conflict-partition.spec
similarity index 100%
rename from src/test/isolation/specs/cluster-conflict-partition.spec
rename to src/test/isolation/specs_backup/cluster-conflict-partition.spec
diff --git a/src/test/isolation/specs/cluster-conflict.spec b/src/test/isolation/specs_backup/cluster-conflict.spec
similarity index 100%
rename from src/test/isolation/specs/cluster-conflict.spec
rename to src/test/isolation/specs_backup/cluster-conflict.spec
diff --git a/src/test/isolation/specs/create-trigger.spec b/src/test/isolation/specs_backup/create-trigger.spec
similarity index 100%
rename from src/test/isolation/specs/create-trigger.spec
rename to src/test/isolation/specs_backup/create-trigger.spec
diff --git a/src/test/isolation/specs/deadlock-hard.spec b/src/test/isolation/specs_backup/deadlock-hard.spec
similarity index 100%
rename from src/test/isolation/specs/deadlock-hard.spec
rename to src/test/isolation/specs_backup/deadlock-hard.spec
diff --git a/src/test/isolation/specs/deadlock-parallel.spec b/src/test/isolation/specs_backup/deadlock-parallel.spec
similarity index 100%
rename from src/test/isolation/specs/deadlock-parallel.spec
rename to src/test/isolation/specs_backup/deadlock-parallel.spec
diff --git a/src/test/isolation/specs/deadlock-simple.spec b/src/test/isolation/specs_backup/deadlock-simple.spec
similarity index 100%
rename from src/test/isolation/specs/deadlock-simple.spec
rename to src/test/isolation/specs_backup/deadlock-simple.spec
diff --git a/src/test/isolation/specs/deadlock-soft-2.spec b/src/test/isolation/specs_backup/deadlock-soft-2.spec
similarity index 100%
rename from src/test/isolation/specs/deadlock-soft-2.spec
rename to src/test/isolation/specs_backup/deadlock-soft-2.spec
diff --git a/src/test/isolation/specs/deadlock-soft.spec b/src/test/isolation/specs_backup/deadlock-soft.spec
similarity index 100%
rename from src/test/isolation/specs/deadlock-soft.spec
rename to src/test/isolation/specs_backup/deadlock-soft.spec
diff --git a/src/test/isolation/specs/delete-abort-savept-2.spec b/src/test/isolation/specs_backup/delete-abort-savept-2.spec
similarity index 100%
rename from src/test/isolation/specs/delete-abort-savept-2.spec
rename to src/test/isolation/specs_backup/delete-abort-savept-2.spec
diff --git a/src/test/isolation/specs/delete-abort-savept.spec b/src/test/isolation/specs_backup/delete-abort-savept.spec
similarity index 100%
rename from src/test/isolation/specs/delete-abort-savept.spec
rename to src/test/isolation/specs_backup/delete-abort-savept.spec
diff --git a/src/test/isolation/specs/detach-partition-concurrently-1.spec b/src/test/isolation/specs_backup/detach-partition-concurrently-1.spec
similarity index 100%
rename from src/test/isolation/specs/detach-partition-concurrently-1.spec
rename to src/test/isolation/specs_backup/detach-partition-concurrently-1.spec
diff --git a/src/test/isolation/specs/detach-partition-concurrently-2.spec b/src/test/isolation/specs_backup/detach-partition-concurrently-2.spec
similarity index 100%
rename from src/test/isolation/specs/detach-partition-concurrently-2.spec
rename to src/test/isolation/specs_backup/detach-partition-concurrently-2.spec
diff --git a/src/test/isolation/specs/detach-partition-concurrently-3.spec b/src/test/isolation/specs_backup/detach-partition-concurrently-3.spec
similarity index 100%
rename from src/test/isolation/specs/detach-partition-concurrently-3.spec
rename to src/test/isolation/specs_backup/detach-partition-concurrently-3.spec
diff --git a/src/test/isolation/specs/detach-partition-concurrently-4.spec b/src/test/isolation/specs_backup/detach-partition-concurrently-4.spec
similarity index 100%
rename from src/test/isolation/specs/detach-partition-concurrently-4.spec
rename to src/test/isolation/specs_backup/detach-partition-concurrently-4.spec
diff --git a/src/test/isolation/specs/drop-index-concurrently-1.spec b/src/test/isolation/specs_backup/drop-index-concurrently-1.spec
similarity index 100%
rename from src/test/isolation/specs/drop-index-concurrently-1.spec
rename to src/test/isolation/specs_backup/drop-index-concurrently-1.spec
diff --git a/src/test/isolation/specs/eval-plan-qual-trigger.spec b/src/test/isolation/specs_backup/eval-plan-qual-trigger.spec
similarity index 100%
rename from src/test/isolation/specs/eval-plan-qual-trigger.spec
rename to src/test/isolation/specs_backup/eval-plan-qual-trigger.spec
diff --git a/src/test/isolation/specs/eval-plan-qual.spec b/src/test/isolation/specs_backup/eval-plan-qual.spec
similarity index 100%
rename from src/test/isolation/specs/eval-plan-qual.spec
rename to src/test/isolation/specs_backup/eval-plan-qual.spec
diff --git a/src/test/isolation/specs/fk-contention.spec b/src/test/isolation/specs_backup/fk-contention.spec
similarity index 100%
rename from src/test/isolation/specs/fk-contention.spec
rename to src/test/isolation/specs_backup/fk-contention.spec
diff --git a/src/test/isolation/specs/fk-deadlock.spec b/src/test/isolation/specs_backup/fk-deadlock.spec
similarity index 100%
rename from src/test/isolation/specs/fk-deadlock.spec
rename to src/test/isolation/specs_backup/fk-deadlock.spec
diff --git a/src/test/isolation/specs/fk-deadlock2.spec b/src/test/isolation/specs_backup/fk-deadlock2.spec
similarity index 100%
rename from src/test/isolation/specs/fk-deadlock2.spec
rename to src/test/isolation/specs_backup/fk-deadlock2.spec
diff --git a/src/test/isolation/specs/fk-partitioned-1.spec b/src/test/isolation/specs_backup/fk-partitioned-1.spec
similarity index 100%
rename from src/test/isolation/specs/fk-partitioned-1.spec
rename to src/test/isolation/specs_backup/fk-partitioned-1.spec
diff --git a/src/test/isolation/specs/fk-partitioned-2.spec b/src/test/isolation/specs_backup/fk-partitioned-2.spec
similarity index 100%
rename from src/test/isolation/specs/fk-partitioned-2.spec
rename to src/test/isolation/specs_backup/fk-partitioned-2.spec
diff --git a/src/test/isolation/specs/fk-snapshot.spec b/src/test/isolation/specs_backup/fk-snapshot.spec
similarity index 100%
rename from src/test/isolation/specs/fk-snapshot.spec
rename to src/test/isolation/specs_backup/fk-snapshot.spec
diff --git a/src/test/isolation/specs/freeze-the-dead.spec b/src/test/isolation/specs_backup/freeze-the-dead.spec
similarity index 100%
rename from src/test/isolation/specs/freeze-the-dead.spec
rename to src/test/isolation/specs_backup/freeze-the-dead.spec
diff --git a/src/test/isolation/specs/horizons.spec b/src/test/isolation/specs_backup/horizons.spec
similarity index 100%
rename from src/test/isolation/specs/horizons.spec
rename to src/test/isolation/specs_backup/horizons.spec
diff --git a/src/test/isolation/specs/index-only-scan.spec b/src/test/isolation/specs_backup/index-only-scan.spec
similarity index 100%
rename from src/test/isolation/specs/index-only-scan.spec
rename to src/test/isolation/specs_backup/index-only-scan.spec
diff --git a/src/test/isolation/specs/inherit-temp.spec b/src/test/isolation/specs_backup/inherit-temp.spec
similarity index 100%
rename from src/test/isolation/specs/inherit-temp.spec
rename to src/test/isolation/specs_backup/inherit-temp.spec
diff --git a/src/test/isolation/specs/inplace-inval.spec b/src/test/isolation/specs_backup/inplace-inval.spec
similarity index 100%
rename from src/test/isolation/specs/inplace-inval.spec
rename to src/test/isolation/specs_backup/inplace-inval.spec
diff --git a/src/test/isolation/specs/insert-conflict-do-nothing-2.spec b/src/test/isolation/specs_backup/insert-conflict-do-nothing-2.spec
similarity index 100%
rename from src/test/isolation/specs/insert-conflict-do-nothing-2.spec
rename to src/test/isolation/specs_backup/insert-conflict-do-nothing-2.spec
diff --git a/src/test/isolation/specs/insert-conflict-do-nothing.spec b/src/test/isolation/specs_backup/insert-conflict-do-nothing.spec
similarity index 100%
rename from src/test/isolation/specs/insert-conflict-do-nothing.spec
rename to src/test/isolation/specs_backup/insert-conflict-do-nothing.spec
diff --git a/src/test/isolation/specs/insert-conflict-do-update-2.spec b/src/test/isolation/specs_backup/insert-conflict-do-update-2.spec
similarity index 100%
rename from src/test/isolation/specs/insert-conflict-do-update-2.spec
rename to src/test/isolation/specs_backup/insert-conflict-do-update-2.spec
diff --git a/src/test/isolation/specs/insert-conflict-do-update-3.spec b/src/test/isolation/specs_backup/insert-conflict-do-update-3.spec
similarity index 100%
rename from src/test/isolation/specs/insert-conflict-do-update-3.spec
rename to src/test/isolation/specs_backup/insert-conflict-do-update-3.spec
diff --git a/src/test/isolation/specs/insert-conflict-do-update.spec b/src/test/isolation/specs_backup/insert-conflict-do-update.spec
similarity index 100%
rename from src/test/isolation/specs/insert-conflict-do-update.spec
rename to src/test/isolation/specs_backup/insert-conflict-do-update.spec
diff --git a/src/test/isolation/specs/insert-conflict-specconflict.spec b/src/test/isolation/specs_backup/insert-conflict-specconflict.spec
similarity index 100%
rename from src/test/isolation/specs/insert-conflict-specconflict.spec
rename to src/test/isolation/specs_backup/insert-conflict-specconflict.spec
diff --git a/src/test/isolation/specs/intra-grant-inplace-db.spec b/src/test/isolation/specs_backup/intra-grant-inplace-db.spec
similarity index 100%
rename from src/test/isolation/specs/intra-grant-inplace-db.spec
rename to src/test/isolation/specs_backup/intra-grant-inplace-db.spec
diff --git a/src/test/isolation/specs/intra-grant-inplace.spec b/src/test/isolation/specs_backup/intra-grant-inplace.spec
similarity index 100%
rename from src/test/isolation/specs/intra-grant-inplace.spec
rename to src/test/isolation/specs_backup/intra-grant-inplace.spec
diff --git a/src/test/isolation/specs/lock-committed-keyupdate.spec b/src/test/isolation/specs_backup/lock-committed-keyupdate.spec
similarity index 100%
rename from src/test/isolation/specs/lock-committed-keyupdate.spec
rename to src/test/isolation/specs_backup/lock-committed-keyupdate.spec
diff --git a/src/test/isolation/specs/lock-committed-update.spec b/src/test/isolation/specs_backup/lock-committed-update.spec
similarity index 100%
rename from src/test/isolation/specs/lock-committed-update.spec
rename to src/test/isolation/specs_backup/lock-committed-update.spec
diff --git a/src/test/isolation/specs/lock-nowait.spec b/src/test/isolation/specs_backup/lock-nowait.spec
similarity index 100%
rename from src/test/isolation/specs/lock-nowait.spec
rename to src/test/isolation/specs_backup/lock-nowait.spec
diff --git a/src/test/isolation/specs/lock-update-delete.spec b/src/test/isolation/specs_backup/lock-update-delete.spec
similarity index 100%
rename from src/test/isolation/specs/lock-update-delete.spec
rename to src/test/isolation/specs_backup/lock-update-delete.spec
diff --git a/src/test/isolation/specs/lock-update-traversal.spec b/src/test/isolation/specs_backup/lock-update-traversal.spec
similarity index 100%
rename from src/test/isolation/specs/lock-update-traversal.spec
rename to src/test/isolation/specs_backup/lock-update-traversal.spec
diff --git a/src/test/isolation/specs/matview-write-skew.spec b/src/test/isolation/specs_backup/matview-write-skew.spec
similarity index 100%
rename from src/test/isolation/specs/matview-write-skew.spec
rename to src/test/isolation/specs_backup/matview-write-skew.spec
diff --git a/src/test/isolation/specs/merge-delete.spec b/src/test/isolation/specs_backup/merge-delete.spec
similarity index 100%
rename from src/test/isolation/specs/merge-delete.spec
rename to src/test/isolation/specs_backup/merge-delete.spec
diff --git a/src/test/isolation/specs/merge-insert-update.spec b/src/test/isolation/specs_backup/merge-insert-update.spec
similarity index 100%
rename from src/test/isolation/specs/merge-insert-update.spec
rename to src/test/isolation/specs_backup/merge-insert-update.spec
diff --git a/src/test/isolation/specs/merge-join.spec b/src/test/isolation/specs_backup/merge-join.spec
similarity index 100%
rename from src/test/isolation/specs/merge-join.spec
rename to src/test/isolation/specs_backup/merge-join.spec
diff --git a/src/test/isolation/specs/merge-match-recheck.spec b/src/test/isolation/specs_backup/merge-match-recheck.spec
similarity index 100%
rename from src/test/isolation/specs/merge-match-recheck.spec
rename to src/test/isolation/specs_backup/merge-match-recheck.spec
diff --git a/src/test/isolation/specs/merge-update.spec b/src/test/isolation/specs_backup/merge-update.spec
similarity index 100%
rename from src/test/isolation/specs/merge-update.spec
rename to src/test/isolation/specs_backup/merge-update.spec
diff --git a/src/test/isolation/specs/multiple-cic.spec b/src/test/isolation/specs_backup/multiple-cic.spec
similarity index 100%
rename from src/test/isolation/specs/multiple-cic.spec
rename to src/test/isolation/specs_backup/multiple-cic.spec
diff --git a/src/test/isolation/specs/multiple-row-versions.spec b/src/test/isolation/specs_backup/multiple-row-versions.spec
similarity index 100%
rename from src/test/isolation/specs/multiple-row-versions.spec
rename to src/test/isolation/specs_backup/multiple-row-versions.spec
diff --git a/src/test/isolation/specs/multixact-no-deadlock.spec b/src/test/isolation/specs_backup/multixact-no-deadlock.spec
similarity index 100%
rename from src/test/isolation/specs/multixact-no-deadlock.spec
rename to src/test/isolation/specs_backup/multixact-no-deadlock.spec
diff --git a/src/test/isolation/specs/multixact-no-forget.spec b/src/test/isolation/specs_backup/multixact-no-forget.spec
similarity index 100%
rename from src/test/isolation/specs/multixact-no-forget.spec
rename to src/test/isolation/specs_backup/multixact-no-forget.spec
diff --git a/src/test/isolation/specs/nowait-2.spec b/src/test/isolation/specs_backup/nowait-2.spec
similarity index 100%
rename from src/test/isolation/specs/nowait-2.spec
rename to src/test/isolation/specs_backup/nowait-2.spec
diff --git a/src/test/isolation/specs/nowait-3.spec b/src/test/isolation/specs_backup/nowait-3.spec
similarity index 100%
rename from src/test/isolation/specs/nowait-3.spec
rename to src/test/isolation/specs_backup/nowait-3.spec
diff --git a/src/test/isolation/specs/nowait-4.spec b/src/test/isolation/specs_backup/nowait-4.spec
similarity index 100%
rename from src/test/isolation/specs/nowait-4.spec
rename to src/test/isolation/specs_backup/nowait-4.spec
diff --git a/src/test/isolation/specs/nowait-5.spec b/src/test/isolation/specs_backup/nowait-5.spec
similarity index 100%
rename from src/test/isolation/specs/nowait-5.spec
rename to src/test/isolation/specs_backup/nowait-5.spec
diff --git a/src/test/isolation/specs/nowait.spec b/src/test/isolation/specs_backup/nowait.spec
similarity index 100%
rename from src/test/isolation/specs/nowait.spec
rename to src/test/isolation/specs_backup/nowait.spec
diff --git a/src/test/isolation/specs/partial-index.spec b/src/test/isolation/specs_backup/partial-index.spec
similarity index 100%
rename from src/test/isolation/specs/partial-index.spec
rename to src/test/isolation/specs_backup/partial-index.spec
diff --git a/src/test/isolation/specs/partition-concurrent-attach.spec b/src/test/isolation/specs_backup/partition-concurrent-attach.spec
similarity index 100%
rename from src/test/isolation/specs/partition-concurrent-attach.spec
rename to src/test/isolation/specs_backup/partition-concurrent-attach.spec
diff --git a/src/test/isolation/specs/partition-drop-index-locking.spec b/src/test/isolation/specs_backup/partition-drop-index-locking.spec
similarity index 100%
rename from src/test/isolation/specs/partition-drop-index-locking.spec
rename to src/test/isolation/specs_backup/partition-drop-index-locking.spec
diff --git a/src/test/isolation/specs/partition-key-update-1.spec b/src/test/isolation/specs_backup/partition-key-update-1.spec
similarity index 100%
rename from src/test/isolation/specs/partition-key-update-1.spec
rename to src/test/isolation/specs_backup/partition-key-update-1.spec
diff --git a/src/test/isolation/specs/partition-key-update-2.spec b/src/test/isolation/specs_backup/partition-key-update-2.spec
similarity index 100%
rename from src/test/isolation/specs/partition-key-update-2.spec
rename to src/test/isolation/specs_backup/partition-key-update-2.spec
diff --git a/src/test/isolation/specs/partition-key-update-3.spec b/src/test/isolation/specs_backup/partition-key-update-3.spec
similarity index 100%
rename from src/test/isolation/specs/partition-key-update-3.spec
rename to src/test/isolation/specs_backup/partition-key-update-3.spec
diff --git a/src/test/isolation/specs/partition-key-update-4.spec b/src/test/isolation/specs_backup/partition-key-update-4.spec
similarity index 100%
rename from src/test/isolation/specs/partition-key-update-4.spec
rename to src/test/isolation/specs_backup/partition-key-update-4.spec
diff --git a/src/test/isolation/specs/plpgsql-toast.spec b/src/test/isolation/specs_backup/plpgsql-toast.spec
similarity index 100%
rename from src/test/isolation/specs/plpgsql-toast.spec
rename to src/test/isolation/specs_backup/plpgsql-toast.spec
diff --git a/src/test/isolation/specs/predicate-gin.spec b/src/test/isolation/specs_backup/predicate-gin.spec
similarity index 100%
rename from src/test/isolation/specs/predicate-gin.spec
rename to src/test/isolation/specs_backup/predicate-gin.spec
diff --git a/src/test/isolation/specs/predicate-gist.spec b/src/test/isolation/specs_backup/predicate-gist.spec
similarity index 100%
rename from src/test/isolation/specs/predicate-gist.spec
rename to src/test/isolation/specs_backup/predicate-gist.spec
diff --git a/src/test/isolation/specs/predicate-hash.spec b/src/test/isolation/specs_backup/predicate-hash.spec
similarity index 100%
rename from src/test/isolation/specs/predicate-hash.spec
rename to src/test/isolation/specs_backup/predicate-hash.spec
diff --git a/src/test/isolation/specs/predicate-lock-hot-tuple.spec b/src/test/isolation/specs_backup/predicate-lock-hot-tuple.spec
similarity index 100%
rename from src/test/isolation/specs/predicate-lock-hot-tuple.spec
rename to src/test/isolation/specs_backup/predicate-lock-hot-tuple.spec
diff --git a/src/test/isolation/specs/prepared-transactions-cic.spec b/src/test/isolation/specs_backup/prepared-transactions-cic.spec
similarity index 100%
rename from src/test/isolation/specs/prepared-transactions-cic.spec
rename to src/test/isolation/specs_backup/prepared-transactions-cic.spec
diff --git a/src/test/isolation/specs/prepared-transactions.spec b/src/test/isolation/specs_backup/prepared-transactions.spec
similarity index 100%
rename from src/test/isolation/specs/prepared-transactions.spec
rename to src/test/isolation/specs_backup/prepared-transactions.spec
diff --git a/src/test/isolation/specs/project-manager.spec b/src/test/isolation/specs_backup/project-manager.spec
similarity index 100%
rename from src/test/isolation/specs/project-manager.spec
rename to src/test/isolation/specs_backup/project-manager.spec
diff --git a/src/test/isolation/specs/propagate-lock-delete.spec b/src/test/isolation/specs_backup/propagate-lock-delete.spec
similarity index 100%
rename from src/test/isolation/specs/propagate-lock-delete.spec
rename to src/test/isolation/specs_backup/propagate-lock-delete.spec
diff --git a/src/test/isolation/specs/read-only-anomaly-2.spec b/src/test/isolation/specs_backup/read-only-anomaly-2.spec
similarity index 100%
rename from src/test/isolation/specs/read-only-anomaly-2.spec
rename to src/test/isolation/specs_backup/read-only-anomaly-2.spec
diff --git a/src/test/isolation/specs/read-only-anomaly-3.spec b/src/test/isolation/specs_backup/read-only-anomaly-3.spec
similarity index 100%
rename from src/test/isolation/specs/read-only-anomaly-3.spec
rename to src/test/isolation/specs_backup/read-only-anomaly-3.spec
diff --git a/src/test/isolation/specs/read-only-anomaly.spec b/src/test/isolation/specs_backup/read-only-anomaly.spec
similarity index 100%
rename from src/test/isolation/specs/read-only-anomaly.spec
rename to src/test/isolation/specs_backup/read-only-anomaly.spec
diff --git a/src/test/isolation/specs/read-write-unique-2.spec b/src/test/isolation/specs_backup/read-write-unique-2.spec
similarity index 100%
rename from src/test/isolation/specs/read-write-unique-2.spec
rename to src/test/isolation/specs_backup/read-write-unique-2.spec
diff --git a/src/test/isolation/specs/read-write-unique-3.spec b/src/test/isolation/specs_backup/read-write-unique-3.spec
similarity index 100%
rename from src/test/isolation/specs/read-write-unique-3.spec
rename to src/test/isolation/specs_backup/read-write-unique-3.spec
diff --git a/src/test/isolation/specs/read-write-unique-4.spec b/src/test/isolation/specs_backup/read-write-unique-4.spec
similarity index 100%
rename from src/test/isolation/specs/read-write-unique-4.spec
rename to src/test/isolation/specs_backup/read-write-unique-4.spec
diff --git a/src/test/isolation/specs/read-write-unique.spec b/src/test/isolation/specs_backup/read-write-unique.spec
similarity index 100%
rename from src/test/isolation/specs/read-write-unique.spec
rename to src/test/isolation/specs_backup/read-write-unique.spec
diff --git a/src/test/isolation/specs/receipt-report.spec b/src/test/isolation/specs_backup/receipt-report.spec
similarity index 100%
rename from src/test/isolation/specs/receipt-report.spec
rename to src/test/isolation/specs_backup/receipt-report.spec
diff --git a/src/test/isolation/specs/referential-integrity.spec b/src/test/isolation/specs_backup/referential-integrity.spec
similarity index 100%
rename from src/test/isolation/specs/referential-integrity.spec
rename to src/test/isolation/specs_backup/referential-integrity.spec
diff --git a/src/test/isolation/specs/reindex-concurrently-toast.spec b/src/test/isolation/specs_backup/reindex-concurrently-toast.spec
similarity index 100%
rename from src/test/isolation/specs/reindex-concurrently-toast.spec
rename to src/test/isolation/specs_backup/reindex-concurrently-toast.spec
diff --git a/src/test/isolation/specs/reindex-concurrently.spec b/src/test/isolation/specs_backup/reindex-concurrently.spec
similarity index 100%
rename from src/test/isolation/specs/reindex-concurrently.spec
rename to src/test/isolation/specs_backup/reindex-concurrently.spec
diff --git a/src/test/isolation/specs/reindex-schema.spec b/src/test/isolation/specs_backup/reindex-schema.spec
similarity index 100%
rename from src/test/isolation/specs/reindex-schema.spec
rename to src/test/isolation/specs_backup/reindex-schema.spec
diff --git a/src/test/isolation/specs/ri-trigger.spec b/src/test/isolation/specs_backup/ri-trigger.spec
similarity index 100%
rename from src/test/isolation/specs/ri-trigger.spec
rename to src/test/isolation/specs_backup/ri-trigger.spec
diff --git a/src/test/isolation/specs/sequence-ddl.spec b/src/test/isolation/specs_backup/sequence-ddl.spec
similarity index 100%
rename from src/test/isolation/specs/sequence-ddl.spec
rename to src/test/isolation/specs_backup/sequence-ddl.spec
diff --git a/src/test/isolation/specs/serializable-parallel-2.spec b/src/test/isolation/specs_backup/serializable-parallel-2.spec
similarity index 100%
rename from src/test/isolation/specs/serializable-parallel-2.spec
rename to src/test/isolation/specs_backup/serializable-parallel-2.spec
diff --git a/src/test/isolation/specs/serializable-parallel-3.spec b/src/test/isolation/specs_backup/serializable-parallel-3.spec
similarity index 100%
rename from src/test/isolation/specs/serializable-parallel-3.spec
rename to src/test/isolation/specs_backup/serializable-parallel-3.spec
diff --git a/src/test/isolation/specs/serializable-parallel.spec b/src/test/isolation/specs_backup/serializable-parallel.spec
similarity index 100%
rename from src/test/isolation/specs/serializable-parallel.spec
rename to src/test/isolation/specs_backup/serializable-parallel.spec
diff --git a/src/test/isolation/specs/simple-write-skew.spec b/src/test/isolation/specs_backup/simple-write-skew.spec
similarity index 100%
rename from src/test/isolation/specs/simple-write-skew.spec
rename to src/test/isolation/specs_backup/simple-write-skew.spec
diff --git a/src/test/isolation/specs/skip-locked-2.spec b/src/test/isolation/specs_backup/skip-locked-2.spec
similarity index 100%
rename from src/test/isolation/specs/skip-locked-2.spec
rename to src/test/isolation/specs_backup/skip-locked-2.spec
diff --git a/src/test/isolation/specs/skip-locked-3.spec b/src/test/isolation/specs_backup/skip-locked-3.spec
similarity index 100%
rename from src/test/isolation/specs/skip-locked-3.spec
rename to src/test/isolation/specs_backup/skip-locked-3.spec
diff --git a/src/test/isolation/specs/skip-locked-4.spec b/src/test/isolation/specs_backup/skip-locked-4.spec
similarity index 100%
rename from src/test/isolation/specs/skip-locked-4.spec
rename to src/test/isolation/specs_backup/skip-locked-4.spec
diff --git a/src/test/isolation/specs/skip-locked.spec b/src/test/isolation/specs_backup/skip-locked.spec
similarity index 100%
rename from src/test/isolation/specs/skip-locked.spec
rename to src/test/isolation/specs_backup/skip-locked.spec
diff --git a/src/test/isolation/specs/stats.spec b/src/test/isolation/specs_backup/stats.spec
similarity index 100%
rename from src/test/isolation/specs/stats.spec
rename to src/test/isolation/specs_backup/stats.spec
diff --git a/src/test/isolation/specs/subxid-overflow.spec b/src/test/isolation/specs_backup/subxid-overflow.spec
similarity index 100%
rename from src/test/isolation/specs/subxid-overflow.spec
rename to src/test/isolation/specs_backup/subxid-overflow.spec
diff --git a/src/test/isolation/specs/temp-schema-cleanup.spec b/src/test/isolation/specs_backup/temp-schema-cleanup.spec
similarity index 100%
rename from src/test/isolation/specs/temp-schema-cleanup.spec
rename to src/test/isolation/specs_backup/temp-schema-cleanup.spec
diff --git a/src/test/isolation/specs/temporal-range-integrity.spec b/src/test/isolation/specs_backup/temporal-range-integrity.spec
similarity index 100%
rename from src/test/isolation/specs/temporal-range-integrity.spec
rename to src/test/isolation/specs_backup/temporal-range-integrity.spec
diff --git a/src/test/isolation/specs/timeouts.spec b/src/test/isolation/specs_backup/timeouts.spec
similarity index 100%
rename from src/test/isolation/specs/timeouts.spec
rename to src/test/isolation/specs_backup/timeouts.spec
diff --git a/src/test/isolation/specs/total-cash.spec b/src/test/isolation/specs_backup/total-cash.spec
similarity index 100%
rename from src/test/isolation/specs/total-cash.spec
rename to src/test/isolation/specs_backup/total-cash.spec
diff --git a/src/test/isolation/specs/truncate-conflict.spec b/src/test/isolation/specs_backup/truncate-conflict.spec
similarity index 100%
rename from src/test/isolation/specs/truncate-conflict.spec
rename to src/test/isolation/specs_backup/truncate-conflict.spec
diff --git a/src/test/isolation/specs/tuplelock-conflict.spec b/src/test/isolation/specs_backup/tuplelock-conflict.spec
similarity index 100%
rename from src/test/isolation/specs/tuplelock-conflict.spec
rename to src/test/isolation/specs_backup/tuplelock-conflict.spec
diff --git a/src/test/isolation/specs/tuplelock-partition.spec b/src/test/isolation/specs_backup/tuplelock-partition.spec
similarity index 100%
rename from src/test/isolation/specs/tuplelock-partition.spec
rename to src/test/isolation/specs_backup/tuplelock-partition.spec
diff --git a/src/test/isolation/specs/tuplelock-update.spec b/src/test/isolation/specs_backup/tuplelock-update.spec
similarity index 100%
rename from src/test/isolation/specs/tuplelock-update.spec
rename to src/test/isolation/specs_backup/tuplelock-update.spec
diff --git a/src/test/isolation/specs/tuplelock-upgrade-no-deadlock.spec b/src/test/isolation/specs_backup/tuplelock-upgrade-no-deadlock.spec
similarity index 100%
rename from src/test/isolation/specs/tuplelock-upgrade-no-deadlock.spec
rename to src/test/isolation/specs_backup/tuplelock-upgrade-no-deadlock.spec
diff --git a/src/test/isolation/specs/two-ids.spec b/src/test/isolation/specs_backup/two-ids.spec
similarity index 100%
rename from src/test/isolation/specs/two-ids.spec
rename to src/test/isolation/specs_backup/two-ids.spec
diff --git a/src/test/isolation/specs/update-conflict-out.spec b/src/test/isolation/specs_backup/update-conflict-out.spec
similarity index 100%
rename from src/test/isolation/specs/update-conflict-out.spec
rename to src/test/isolation/specs_backup/update-conflict-out.spec
diff --git a/src/test/isolation/specs/update-locked-tuple.spec b/src/test/isolation/specs_backup/update-locked-tuple.spec
similarity index 100%
rename from src/test/isolation/specs/update-locked-tuple.spec
rename to src/test/isolation/specs_backup/update-locked-tuple.spec
diff --git a/src/test/isolation/specs/vacuum-concurrent-drop.spec b/src/test/isolation/specs_backup/vacuum-concurrent-drop.spec
similarity index 100%
rename from src/test/isolation/specs/vacuum-concurrent-drop.spec
rename to src/test/isolation/specs_backup/vacuum-concurrent-drop.spec
diff --git a/src/test/isolation/specs/vacuum-conflict.spec b/src/test/isolation/specs_backup/vacuum-conflict.spec
similarity index 100%
rename from src/test/isolation/specs/vacuum-conflict.spec
rename to src/test/isolation/specs_backup/vacuum-conflict.spec
diff --git a/src/test/isolation/specs/vacuum-no-cleanup-lock.spec b/src/test/isolation/specs_backup/vacuum-no-cleanup-lock.spec
similarity index 100%
rename from src/test/isolation/specs/vacuum-no-cleanup-lock.spec
rename to src/test/isolation/specs_backup/vacuum-no-cleanup-lock.spec
diff --git a/src/test/isolation/specs/vacuum-skip-locked.spec b/src/test/isolation/specs_backup/vacuum-skip-locked.spec
similarity index 100%
rename from src/test/isolation/specs/vacuum-skip-locked.spec
rename to src/test/isolation/specs_backup/vacuum-skip-locked.spec
-- 
2.43.0

#3Ashutosh Bapat
ashutosh.bapat.oss@gmail.com
In reply to: BharatDB (#1)

Hi Blessy,

On Tue, Mar 11, 2025 at 6:03 PM BharatDB <bharatdbpg@gmail.com> wrote:

Hi ,

I’ve been exploring logical replication and noticed that if the column datatypes don’t match between the publisher and subscriber, PostgreSQL doesn’t give a warning. This can cause unexpected behavior, and I thought it might be helpful to alert users when this happens.

### **What This Patch Does:**

- Adds a warning when a column's datatype in the subscriber doesn’t match the publisher.

- Helps users catch issues early instead of running into silent errors later.

Why I Think It’s Useful:- Avoids confusion when replication doesn’t work as expected. - Makes debugging easier by pointing out potential problems. I’d love to get feedback on whether this is a good idea and if I’ve approached it correctly. Since I’m still learning, any suggestions for improvement would be really helpful. I’ve attached the patch—please let me know what you think!

Large part of your patch is renaming files which are not related to
this patch. Can you please clean that up.

The code also looks problematic
+    Oid local_typid = TupleDescAttr(tupdesc, i)->atttypid;
+    Oid remote_typid = lrel.atttyps[i];

AFAIK, the attribute positions on the publisher and subscriber need
not match, but this code assumes that the attributes at ith position
on publisher has to be mapped to the attribute at the same position on
the subscriber.

+
+    /* Get human-readable type names */
+    char *local_typname = format_type_be(local_typid);
+    char *remote_typname = format_type_be(remote_typid);

format_type_be() will give the name of the type on the subscriber not
on the publisher. You will need to look up logical replication type
cache for the name of the type on remote. If further assumes that the
OIDs on the same types on the publisher and the subscriber are same,
which may not be.

My memory is hazy as to whether we consider the types with the same
name on publisher and subscriber to be equivalent. If not, then I see
no way to make sure that the mapped columns are of the same type.

--
Best Wishes,
Ashutosh Bapat

#4David G. Johnston
david.g.johnston@gmail.com
In reply to: Ashutosh Bapat (#3)

On Wednesday, March 12, 2025, Ashutosh Bapat <ashutosh.bapat.oss@gmail.com>
wrote:

Hi Blessy,

On Tue, Mar 11, 2025 at 6:03 PM BharatDB <bharatdbpg@gmail.com> wrote:

Hi ,

I’ve been exploring logical replication and noticed that if the column

datatypes don’t match between the publisher and subscriber, PostgreSQL
doesn’t give a warning. This can cause unexpected behavior, and I thought
it might be helpful to alert users when this happens.

### **What This Patch Does:**

- Adds a warning when a column's datatype in the subscriber doesn’t

match the publisher.

- Helps users catch issues early instead of running into silent errors

later.

Why I Think It’s Useful:- Avoids confusion when replication doesn’t

work as expected. - Makes debugging easier by pointing out potential
problems. I’d love to get feedback on whether this is a good idea and if
I’ve approached it correctly. Since I’m still learning, any suggestions for
improvement would be really helpful. I’ve attached the patch—please let me
know what you think!

Large part of your patch is renaming files which are not related to
this patch. Can you please clean that up.

If there is really a patch submission happening here I suggest you start a
new thread with a meaningful subject line and proper recipients (one list,
not -owners)

David J.

#5Andres Freund
andres@anarazel.de
In reply to: Ashutosh Bapat (#3)

On 2025-03-12 15:56:08 +0530, Ashutosh Bapat wrote:

Large part of your patch is renaming files which are not related to
this patch. Can you please clean that up.

Since this has not been fixed, and the patch has not passed CI since at least
mid March, I'll close this CF entry.