개요
2026.01.06-[PostgreSQL] 복제 (Replication)에서 Logical Replication에서 Replica Identity가 필요하다는 것을 알게 되었다. 이번 글에서는 Replica Identity 설정값과 조회 방법 등에 대해서 좀 정리한다.
Replica Identity
publication이란 테이블 또는 테이블 그룹에서 생성된 변경 사항의 집합이며, 변경 집합 또는 복제 집합이라고 할 수 있다. publication은 스키마와 다르며 테이블 접근 방식에 영향을 미치지 않고, 하나의 테이블에 여러 publication을 추가할 수 있기도 하다. 그리고 게시된 테이블은 갱신하거나 삭제할 행을 식별할 수 있도록 Replica Indentity가 구성되어 있어야 한다.

Replica Indentity는 기본적으로 PK이지만 필요에 따라 다른 고유 인덱스로 설정할 수 있다. 또는 전체 행이 키가 되도록 FULL로 지정할 수도 있다.
Replica Identity 조회
Replica Indentity는 pg_class 테이블의 relreplident 속성으로 확인할 수 있다. 조회 결과에는 PostgreSQL 기본 테이블도 포함되어 있으므로 추가적인 필터링이 필요할 수 있다.
SELECT relname
, relreplident
FROM pg_catalog.pg_class cls
WHERE TRUE
AND cls.relkind = 'r' -- ordinary table

relreplident은 하나의 문자로 속성을 표시하고 있는데, 각 속성은 아래와 같다.
| 속성값 | 의미 |
| d | DEFAULT |
| i | USING INDEX index_name |
| f | FULL |
| n | NOTHING |
Replica Identity 변경
Replica Indentity은 ALTER TABLE 문으로 변경할 수 있다.
ALTER TABLE [ IF EXISTS ] [ ONLY ] name [ * ]
REPLICA IDENTITY { DEFAULT | USING INDEX index_name | FULL | NOTHING }
유감스럽게도 테이블을 생성하면서 지정할 수는 없는 것 같다.
참고 문서
https://www.postgresql.org/docs/current/logical-replication-publication.html
https://www.postgresql.org/docs/current/sql-altertable.html#SQL-ALTERTABLE-REPLICA-IDENTITY
https://jaegukim.github.io/posts/replicaidentity/
https://www.postgresql.org/docs/current/catalog-pg-class.html