이 문서는 지원되지 않는 버전의 PostgreSQL을위한 것입니다.
당신은에 대해 같은 페이지를 볼 수 있습니다토토 커뮤니티 : 문서 : 17 : 32.9. 비동기 알림버전 또는 위에 나열된 다른 지원 버전 중 하나입니다.

1.5. 비동기 알림

Postgres지원 청취 및 알림 명령을 통한 비동기 알림. 에이 백엔드는 특정 알림에 관심을 등록합니다 청취 명령으로 조건 (그리고 듣기를 중단 할 수 있습니다. 무기력 명령). 모든 뒷면은 특정에 대해 듣고 있습니다 그 알림이있을 때 조건에 비동기 적으로 알림을받습니다. 조건 이름은 모든 백엔드에 의해 실행됩니다. 추가 없음 정보는 알림에서 청취자로 전달됩니다. 따라서, 일반적으로 전달 해야하는 실제 데이터는 데이터베이스 관계를 통해 전송. 일반적으로 조건 이름은 관련 관계와 동일하지만 관련 관계가 있어야합니다.

libpq신청서 제출 듣고 평범하지 않은 명령은 일반 SQL 쿼리입니다. 그 후, 도착 Of Notify 메시지는 pqnotifies (). 호출하여 감지 할 수 있습니다.

  • pqnotifies다음을 반환합니다 처리되지 않은 알림 메시지 목록에서 알림 백엔드에서 받았습니다. 아니오가 있으면 Null을 반환합니다 보류중인 알림. 알림이 반환되면 pqnotifies, 그것은 처리 된 것으로 간주되며 알림 목록.

    pgnotify * pqnotifies (pgconn * conn);
    
    typedef struct pgnotify 
        char relname [이름 지정된 사람];       /* 관계 이름
                                          * 데이터 포함 */
        int be_pid;                     / * 백엔드의 프로세스 ID */
     pgnotify;
    처리 후 pgnotify 객체가 retordpqnotifies,free ()메모리 누출을 피하려면

    참고 :inPostgres6.4 이상,be_pid는 알림입니다 백엔드는 이전 버전에서는 항상 당신이었습니다 자신의 백엔드PID.

두 번째 샘플 프로그램은 비동기식 알림.

pqnotifies ()실제로 읽지 않습니다 백엔드 데이터; 이전에 흡수 된 메시지를 반환합니다 또 다른libpq함수. 이전 릴리스libpq, 유일한 방법 알림 메시지를 적시에받는 것은 지속적으로 쿼리를 제출하고 비어있는 쿼리를 제출 한 다음pqnotifies ()각각pqExec (). 이것이 여전히 작동하는 동안, 그것은입니다 처리 전력 낭비로 더 이상 사용되지 않습니다.

없을 때 통지 메시지를 확인하는 더 좋은 방법 유용한 쿼리는 전화하는 것입니다pqconsumeInput (), 그 다음 확인pqnotifies (). 사용할 수 있습니다select(2) 백엔드 데이터가 도착할 때까지 기다리려면, 따라서 NO 사용CPU할 일이 있습니다. (보다pqsocket ()파일 디스크립터 번호를 얻으려면 와 함께 사용하려면select.)이 점에 유의하십시오 Queries를 제출하든 OK는 작동합니다pqsendquery/pqgetresult또는 간단히 사용PQEXEC. 당신은 그러나 확인해야합니다pqnotifies ()각각pqgetresult또는PQEXEC, 알림이 들어 있는지 확인하십시오 쿼리 처리 중에.