2016-07-19 5 views
1

PostgreSQL에서 데이터 변경을위한 알림을 수신해야하는 C++ 응용 프로그램을 작성 중입니다. libpqxx 라이브러리가 있습니다. 그러나 tutorial에는 그러한 사용 사례가 포함되어 있지 않습니다. 알림은 여러 채널에서 수신해야합니다. 또한 네트워킹 라이브러리로 boost::asio을 사용하고 있습니다. 가능한 경우 asio 원시 BSD 스타일 소켓을 폴링하는 대신 알림 이벤트에 대한 비동기 콜백을 사용하는 소켓 클래스를 사용하는 것이 좋습니다. 누군가가 이것에 대한 샘플 코드를 제공하거나이를 달성 할 수있는 방법에 대한 몇 가지 외부 리소스에 대한 링크를 제공 할 수 있습니까?libpqxx를 사용하여 PostgreSQL 데이터베이스에서 알림을받는 방법은 무엇입니까?

+0

누가 당신에게 PostgreSQL에서 클라이언트에게 "데이터 변경"을 알릴 수 있다고 말했습니까? Postgresql에는 그런 종류의 것이 없습니다. Postgresql이 가지고있는 유일한 것은 협력하는 클라이언트 프로세스 사이의 추상적 인 수신 대기/통지 신호 기능입니다. –

+1

트리거와 함께 사용할 수있는 NOTIFY 기능을 의미합니다. [여기] (https://www.postgresql.org/docs/9.5/static/sql-notify.html)는 문서입니다. 클라이언트 응용 프로그램은 데이터베이스에 소켓을 열어 지정된 채널에서 알림을 수신 할 수 있습니다. – bobeff

답변

1

당신은 notification_receiver에 대한 API 참조입니다 http://pqxx.org/devprojects/libpqxx/doc/4.0/html/Reference/a00208.html "공지 사항 및 수신기"및 http://pqxx.org/devprojects/libpqxx/doc/4.0/html/Reference/a00062.html를 참조 pqxx::notification_receiver에서 파생 된 클래스가 필요합니다.

+0

_boost :: asio_ 이벤트 루프로 수신되는 알림을 통합 할 수 있습니까? – bobeff

+0

폴링을 피하는 것이 정말 중요하다면 libpqxx 대신 libpq를 사용합니다. 폴링 방지에 대한 도움말은 https://www.postgresql.org/docs/9.1/static/libpq-notify.html을 참조하십시오. 자신감이 부족함 : asio와의 직접적인 통합은 본질적으로 불가능하다고 생각합니다. 나는 libpq로 알림을 수신하기 위해 독점적으로 별도의 스레드를 실행 한 다음 io_service :: post를 사용하여 asio hairball에 알림을 전달합니다. – NovaDenizen

+0

10x * libpqxx *를 * asio *의 * null_buffers * 기능을 사용하여 * boost :: asio *와 통합 할 수있었습니다. – bobeff

관련 문제