Em tabela particionada, o decoding lógico emite as mudanças da partição folha. É o REPLICA IDENTITY dela que conta — o do parent nunca é lido. E ALTER no parent não propaga:

CREATE TABLE t (id bigint, created_at timestamp, PRIMARY KEY (id, created_at))
  PARTITION BY RANGE (created_at);
CREATE TABLE t_p1 PARTITION OF t FOR VALUES FROM ('2026-01-01') TO ('2027-01-01');

ALTER TABLE t REPLICA IDENTITY FULL;
-- t    -> f
-- t_p1 -> d   partição existente: não cascateou

CREATE TABLE t_p2 PARTITION OF t FOR VALUES FROM ('2027-01-01') TO ('2028-01-01');
-- t_p2 -> d   partição nova: não herdou

Partição nasce em DEFAULT e fica lá. Para replicação, o ALTER no parent é um no-op silencioso.

Isso morde no CDC. O AWS DMS avisa que não suporta REPLICA IDENTITY FULL quando o endpoint usa o plugin pglogical — e, de fato, os UPDATE não chegam no destino. Se as folhas estão em FULL, olhar o parent não denuncia nada: o valor dele é independente do que o decoding enxerga.

O fix é uma linha por partição:

ALTER TABLE t_p1 REPLICA IDENTITY DEFAULT;  -- passa a usar a PK
ALTER TABLE t_p2 REPLICA IDENTITY DEFAULT;

Só de catálogo: sem rewrite, milissegundos, independente do tamanho da tabela.

Conferir depois — sempre nas folhas, nunca no parent:

SELECT c.relname,
       CASE c.relreplident WHEN 'd' THEN 'DEFAULT' WHEN 'f' THEN 'FULL'
                           WHEN 'n' THEN 'NOTHING' WHEN 'i' THEN 'INDEX' END AS ri
FROM pg_inherits i
JOIN pg_class c ON c.oid = i.inhrelid
WHERE i.inhparent = 't'::regclass
ORDER BY c.relname;

DEFAULT usa a primary key — e como a chave de partição precisa fazer parte da PK, ela já está lá.