Sequin이라는 회사는 Salesforce와 HubSpot과 같은 제3자 API로부터 데이터를 동기화하여 개발자들이 그들의 Postgres 데이터베이스를 사용하여 API 데이터를 구축하게 합니다.
Postgres는 테이블 변화에 기반한 워크플로우를 트리거하거나, 실시간으로 다른 데이터 저장소, 시스템, 또는 서비스로 데이터를 스트리밍하는 등, 이동 중인 데이터를 포착하는 여러 옵션을 제공합니다.
가장 간단한 접근법은 Postgres의 프로세스 간 통신 기능인 Listen/Notify를 사용하는 것입니다. 이는 publish-subscribe 패턴의 구현체이지만, "최대 한 번" 배달 의미론과 8000 바이트의 페이로드 크기 제한과 같은 제한이 있습니다.
또 다른 방법은 테이블을 직접 폴링하는 것으로, 이는 각 테이블이 행이 업데이트될 때마다 업데이트되는 updated_at 칼럼이나 유사한 것을 가지고 있어야 합니다. 그러나 이 방법은 행이 삭제될 때를 감지할 수 없으며, 차이를 제공하지 않습니다.
Postgres는 다른 Postgres 데이터베이스로의 스트리밍 복제를 지원하며, 이는 애플리케이션의 변화를 포착하는 데 사용될 수 있습니다. 그러나 이 방법은 복잡하며 postgresql.conf를 조정해야 할 수도 있습니다.
변화는 또한 변경 사항을 로깅하는 감사 테이블에서 포착될 수 있습니다. 이 접근법은 복제 슬롯을 사용하는 것과 유사하지만, 더 수동적입니다.
외부 데이터 소스에서 읽고 쓸 수 있게 해주는 Postgres 기능인 외부 데이터 래퍼(FDWs)도 있습니다. 그러나 이 방법은 매우 특정한 상황에서만 권장됩니다.
결론적으로, Postgres에서 변화를 포착하는 최선의 방법은 사용 사례에 따라 달라집니다. Listen/Notify는 비중요 이벤트 포착에 좋고, 변화를 폴링하는 것은 간단한 사용 사례에 대한 직관적인 해결책이며, 복제는 견고한 해결책에 대한 최선의 선택입니다. 복제가 너무 어렵다면, 감사 테이블이 좋은 중간 해결책이 될 수 있습니다.