On Pub and Sub: ------------------ DO $$ BEGIN EXECUTE 'CREATE TYPE ri_n0 AS (f text)'; FOR i IN 1..25 LOOP -- levels knob EXECUTE format('CREATE TYPE ri_n%s AS (f ri_n%s)', i, i - 1); END LOOP; END $$; CREATE TABLE t (k ri_n25 PRIMARY KEY); Pub: ----- CREATE PUBLICATION pub1 FOR ALL TABLES; Sub: ----- (Use destination as 'table'; 'all'/'log' may end up consuming too much memory to dump such a huge RI, and thus the CLT-related problem may be hidden.) CREATE SUBSCRIPTION sub1 CONNECTION '...' PUBLICATION pub1 WITH(CONFLICT_LOG_DESTINATION='table'); Pub: ----- DO $$ DECLARE r text := format('ROW(%L)::ri_n0', repeat('"', 10)); BEGIN FOR i IN 1..25 LOOP r := format('ROW(%s)::ri_n%s', r, i); END LOOP; EXECUTE format('INSERT INTO t VALUES (%s)', r); END $$; Sub: ----- --wait for data to be replicated, check stored length: SELECT pg_column_size(k) FROM t; Sub: ----- DELETE FROM t; Pub (to reproduce delete_missing conflict): ----- DELETE FROM t; -- subscriber now errors and retries in a loop