DROP SUBSCRIPTION — 구독 제거하기

DROP SUBSCRIPTION — 구독 제거하기

논리적 복제(Logical Replication)에서 구독(subscription)은 게시자(publisher)로부터 변경 사항을 받아오는 역할을 해요. 더 이상 쓰지 않는 구독을 지우려면 DROP SUBSCRIPTION을 쓰는데요, 이 단순해 보이는 명령도 내부적으로는 원격 호스트의 복제 슬롯(replication slot) 정리까지 함께 처리하기 때문에 주의할 점이 있어요.

출처: PostgreSQL 문서

본문

Synopsis (문법)

DROP SUBSCRIPTION [ IF EXISTS ] name [ CASCADE | RESTRICT ]

Description (설명)

DROP SUBSCRIPTION은 데이터베이스 클러스터에서 구독을 제거해요.

이 명령을 실행하려면 사용자가 구독의 소유자여야 해요.

구독이 복제 슬롯과 연결되어 있다면, DROP SUBSCRIPTION은 트랜잭션 블록 안에서 실행할 수 없어요. (ALTER SUBSCRIPTION으로 슬롯 연결을 끊을 수 있어요.)

Parameters (매개변수)

  • IF EXISTS — 구독이 존재하지 않아도 오류를 내지 않아요. 이 경우에는 notice가 발행돼요.
  • name — 삭제할 구독의 이름이에요.
  • CASCADE / RESTRICT — 이 키워드는 아무 효과가 없어요. 구독에는 의존 관계가 없기 때문이에요.

Notes (참고)

원격 호스트에 복제 슬롯이 연결된(보통의 상태) 구독을 삭제할 때, DROP SUBSCRIPTION은 원격 호스트에 연결해 복제 슬롯(및 남아 있는 테이블 동기화 슬롯)을 함께 삭제하려고 해요. 이는 원격 호스트에서 구독에 할당된 리소스를 해제하기 위해 필요한 작업이에요. 만약 원격 호스트에 연결할 수 없거나, 원격 복제 슬롯을 삭제할 수 없거나, 슬롯이 존재하지 않거나 애초에 없었다면 DROP SUBSCRIPTION 명령은 실패해요. 이런 상황에서 진행하려면 먼저 ALTER SUBSCRIPTION ... DISABLE로 구독을 비활성화하고, 이어서 ALTER SUBSCRIPTION ... SET (slot_name = NONE)으로 복제 슬롯과의 연결을 끊어야 해요. 그 후에는 DROP SUBSCRIPTION이 구독 자체의 복제 슬롯 삭제를 시도하지 않아요. 다만 테이블 동기화가 일부 끝나지 않았다면 게시자에게 연결해 내부적으로 생성된 테이블 동기화 슬롯을 삭제하려 할 수 있는데, 게시자에 연결할 수 없다면 그 슬롯들(그리고 아직 존재한다면 메인 슬롯도)을 수동으로 삭제해야 해요. 그렇지 않으면 계속 WAL을 예약해 두어 결국 디스크가 가득 차는 문제가 생길 수 있어요. Section 29.2.1도 함께 보세요.

구독이 복제 슬롯과 연결되어 있다면 DROP SUBSCRIPTION은 트랜잭션 블록 안에서 실행할 수 없어요.

Examples (예제)

구독을 삭제해요:

DROP SUBSCRIPTION mysub;

Compatibility (호환성)

DROP SUBSCRIPTION은 PostgreSQL 확장이에요.

더 알아보기 (Learn more)

  • 구독을 만들 때 쓰는 CREATE SUBSCRIPTION 명령
  • 구독 설정을 바꾸는 ALTER SUBSCRIPTION 명령
  • PostgreSQL 논리적 복제(Logical Replication) 개념