diff --git a/contrib/test_decoding/expected/concurrent_ddl_dml.out b/contrib/test_decoding/expected/concurrent_ddl_dml.out
index 3742a2a247..c8960c3ff2 100644
--- a/contrib/test_decoding/expected/concurrent_ddl_dml.out
+++ b/contrib/test_decoding/expected/concurrent_ddl_dml.out
@@ -797,3 +797,30 @@ COMMIT
 stop    
 (1 row)
 
+
+starting permutation: s1_init s1_begin s1_insert_tbl3_2f s2_alter_type_add s1_insert_tbl3_3f s1_commit s2_get_changes
+step s1_init: SELECT 'init' FROM pg_create_logical_replication_slot('isolation_slot', 'test_decoding');
+?column?
+--------
+init    
+(1 row)
+
+step s1_begin: BEGIN;
+step s1_insert_tbl3_2f: INSERT INTO tbl3 (val1, val2) VALUES (1, (1, '2'));
+step s2_alter_type_add: ALTER TYPE comp ADD ATTRIBUTE f3 int;
+step s1_insert_tbl3_3f: INSERT INTO tbl3 (val1, val2) VALUES (1, (1, '2', 3));
+step s1_commit: COMMIT;
+step s2_get_changes: SELECT data FROM pg_logical_slot_get_changes('isolation_slot', NULL, NULL, 'include-xids', '0', 'skip-empty-xacts', '1');
+data                                                           
+---------------------------------------------------------------
+BEGIN                                                          
+table public.tbl3: INSERT: val1[integer]:1 val2[comp]:'(1,2)'  
+table public.tbl3: INSERT: val1[integer]:1 val2[comp]:'(1,2,3)'
+COMMIT                                                         
+(4 rows)
+
+?column?
+--------
+stop    
+(1 row)
+
diff --git a/contrib/test_decoding/specs/concurrent_ddl_dml.spec b/contrib/test_decoding/specs/concurrent_ddl_dml.spec
index d16515e6f4..d4690b92d9 100644
--- a/contrib/test_decoding/specs/concurrent_ddl_dml.spec
+++ b/contrib/test_decoding/specs/concurrent_ddl_dml.spec
@@ -2,14 +2,20 @@ setup
 {
     DROP TABLE IF EXISTS tbl1;
     DROP TABLE IF EXISTS tbl2;
+    DROP TABLE IF EXISTS tbl3;
+    DROP TYPE IF EXISTS comp;
+    CREATE TYPE comp AS (f1 int, f2 text);
     CREATE TABLE tbl1(val1 integer, val2 integer);
     CREATE TABLE tbl2(val1 integer, val2 integer);
+    CREATE TABLE tbl3(val1 INT, val2 comp);
 }
 
 teardown
 {
     DROP TABLE tbl1;
     DROP TABLE tbl2;
+    DROP TABLE tbl3;
+    DROP TYPE comp;
     SELECT 'stop' FROM pg_drop_replication_slot('isolation_slot');
 }
 
@@ -21,6 +27,8 @@ step "s1_begin" { BEGIN; }
 step "s1_insert_tbl1" { INSERT INTO tbl1 (val1, val2) VALUES (1, 1); }
 step "s1_insert_tbl2" { INSERT INTO tbl2 (val1, val2) VALUES (1, 1); }
 step "s1_insert_tbl2_3col" { INSERT INTO tbl2 (val1, val2, val3) VALUES (1, 1, 1); }
+step "s1_insert_tbl3_2f" { INSERT INTO tbl3 (val1, val2) VALUES (1, (1, '2')); }
+step "s1_insert_tbl3_3f" { INSERT INTO tbl3 (val1, val2) VALUES (1, (1, '2', 3)); }
 step "s1_commit" { COMMIT; }
 
 session "s2"
@@ -44,6 +52,8 @@ step "s2_alter_tbl2_3rd_char" { ALTER TABLE tbl2 ALTER COLUMN val3 TYPE characte
 step "s2_alter_tbl2_3rd_text" { ALTER TABLE tbl2 ALTER COLUMN val3 TYPE text; }
 step "s2_alter_tbl2_3rd_int" { ALTER TABLE tbl2 ALTER COLUMN val3 TYPE int USING val3::integer; }
 
+step "s2_alter_type_add" { ALTER TYPE comp ADD ATTRIBUTE f3 int; }
+
 step "s2_get_changes" { SELECT data FROM pg_logical_slot_get_changes('isolation_slot', NULL, NULL, 'include-xids', '0', 'skip-empty-xacts', '1'); }
 
 
@@ -86,3 +96,5 @@ permutation "s1_init" "s2_alter_tbl2_add_char" "s1_begin" "s1_insert_tbl1" "s2_a
 permutation "s1_init" "s2_alter_tbl2_add_text" "s1_begin" "s1_insert_tbl1" "s2_alter_tbl2_3rd_char" "s1_insert_tbl2_3col" "s1_commit" "s2_alter_tbl2_drop_3rd_col" "s1_insert_tbl2" "s2_get_changes"
 
 permutation "s1_init" "s2_alter_tbl2_add_char" "s1_begin" "s1_insert_tbl1" "s2_alter_tbl2_drop_3rd_col" "s1_insert_tbl1" "s1_commit" "s2_get_changes"
+
+permutation "s1_init" "s1_begin" "s1_insert_tbl3_2f" "s2_alter_type_add" "s1_insert_tbl3_3f" "s1_commit" "s2_get_changes"
