젠 토토지원 를 통한 비동기 알림듣기andNotify명령. 백엔드 레지스터 와의 특정 알림 조건에 대한 관심듣기명령 (그리고 듣기를 멈출 수 있습니다 와 함께Unlisten명령). 모든 뒷면 특정 조건에 대한 청취에 알 수 있습니다 a 때 비동기 적으로Notify조건 이름은 모든 백엔드에 의해 실행됩니다. 추가 없음 정보는 알림에서 청취자로 전달됩니다. 따라서, 일반적으로 전달 해야하는 실제 데이터는 데이터베이스 관계를 통해 전송. 일반적으로 조건 이름은 관련 관계와 동일하지만 관련 관계가 있어야합니다.
libpq신청서 제출듣기andUnlisten명령
일반 SQL 명령으로. 그 후, 도착Notify전화를 통해 메시지를 감지 할 수 있습니다pqnotifies
.
pqnotifies
다음을 반환합니다
처리되지 않은 알림 메시지 목록에서 알림
백엔드에서 받았습니다. 아니오가 있으면 Null을 반환합니다
보류중인 알림. 알림이 반환되면
pqnotifies, 그것은 처리 된 것으로 간주되며
알림 목록.
pgnotify * pqnotifies (pgconn * conn); typedef struct pgnotify char relname [이름 지정된 사람]; /* 관계 이름 * 데이터 포함 */ int be_pid; / * 백엔드의 프로세스 ID */ pgnotify;
처리 후pgnotify객체가 반환pqnotifies
,free ()
메모리 누출을 피하려면
참고 :in젠 토토6.4 이상,be_pid알림의 것입니다 백엔드, 이전 버전에서는 항상였습니다.PID자신의 백엔드.
두 번째 샘플 프로그램은 비동기식 알림.
pqnotifies ()
실제로는 그렇지 않습니다
백엔드 데이터를 읽습니다. 이전에 흡수 된 메시지를 반환합니다
다른 사람으로libpq함수. ~ 안에
의 사전 릴리스libpq,
적시에 알림 메시지를 수신하는 유일한 방법은
지속적으로 쿼리, 심지어 쿼리를 제출 한 다음 확인pqnotifies ()
각각pqExec ()
. 이것은 여전히 작동하는 동안
처리 전력 낭비로 더 이상 사용되지 않습니다.
없을 때 통지 메시지를 확인하는 더 좋은 방법
유용한 쿼리는 전화하는 것입니다pqconsumeInput ()
, 그 다음 확인pqnotifies ()
. 사용할 수 있습니다select ()
백엔드 데이터가 도착할 때까지 기다리려면
따라서 NO 사용CPU전원
할 일이 없다면. (보다pqsocket ()
파일 디스크립터 번호를 얻으려면
와 함께 사용하려면select ()
.)
Queries를 제출하든pqsendquery
/pqgetresult
또는 간단히 사용PQEXEC
. 그러나 확인해야합니다pqnotifies ()
각각pqgetresult
또는PQEXEC
, 알림이 들어 있는지 확인하십시오
쿼리 처리 중에.