PostgreSQL듣기
및Notify
명령. 클라이언트 세션은 특정 롤 토토 채널에 대한 관심을듣기
명령 (그리고Unlisten
명령). 특정 채널에서 듣는 모든 세션은 A 일 때 비동기 적으로 롤 토토을받습니다.Notify
해당 채널 이름을 가진 명령은 모든 세션에서 실행됩니다. 에이“Payload”문자열을 전달하여 추가 데이터를 청취자에게 전달할 수 있습니다.
libpq신청서 제출듣기
, Unlisten
및Notify
일반 SQL 명령으로 명령. 의 도착Notify
전화로 메시지를 감지 할 수 있습니다pqnotifies
.
함수pqnotifies
서버에서받은 처리되지 않은 알림 메시지 목록에서 다음 알림을 반환합니다. 보류중인 알림이없는 경우 널 포인터를 반환합니다.pqnotifies
, 처리 된 것으로 간주되며 롤 토토 목록에서 제거됩니다.
pgnotify *pqnotifies (pgconn *conn);
처리 후pgnotify
개체에 의해 반환pqnotifies
PQFREEMEM
. 를 해방시키기에 충분합니다pgnotify
포인터; 그만큼Relname
및추가
필드는 별도의 할당을 나타내지 않습니다. (이 분야의 이름은 역사적입니다. 특히 채널 이름은 관계 이름과 관련이 없습니다.)
예 32.2비동기 롤 토토 사용을 보여주는 샘플 프로그램을 제공합니다.
pqnotifies
실제로 서버에서 데이터를 읽지 않습니다. 이전에 다른 사람이 흡수 한 메시지를 반환합니다libpq함수. 고대 릴리스에서libpq, 적시에 수령하는 유일한 방법Notify
메시지는 끊임없이 명령, 심지어 빈 명령을 제출 한 다음 확인하는 것이 었습니다pqnotifies
각각PQEXEC
. 이것은 여전히 작동하지만 처리 능력 낭비로 더 이상 사용되지 않습니다.
확인하는 더 좋은 방법Notify
유용한 명령이없는 경우 메시지를 호출하는 것입니다pqconsumeInput
, checkpqnotifies
. 사용할 수 있습니다select ()
서버에서 데이터가 도착하기를 기다리려면 NOCPU할 일이 없다면 힘. (보다pqsocket
와 함께 사용할 파일 설명자 번호를 얻으려면select ()
.) 이것은 명령을 제출하든이 작동합니다.pqsendquery
/pqgetresult
또는 간단히 사용PQEXEC
. 그러나 확인해야합니다pqnotifies
각각pqgetresult
또는PQEXEC
, 명령 처리 중에 롤 토토이 들어 있는지 확인하려면