이 문서는 지원되지 않는 PostgreSQL 버전에 대한 것입니다.
다음에 대한 동일한 페이지를 보고 싶을 수도 있습니다.토토 커뮤니티 : 문서 : 17 : 32.9. 비동기 알림버전 또는 위에 나열된 다른 지원 버전 중 하나를 사용하세요.

1.5. 비동기 알림

포스트그레지원 LISTEN 및 NOTIFY 명령을 통한 비동기 알림. 에이 백엔드는 특정 알림에 대한 관심을 등록합니다. LISTEN 명령을 사용하여 조건을 설정하고(다음을 사용하여 듣기를 중지할 수 있음) UNLISTEN 명령). 특정 백엔드를 수신하는 모든 백엔드 해당 조건에 대한 NOTIFY가 발생하면 조건이 비동기식으로 통보됩니다. 조건 이름은 모든 백엔드에서 실행됩니다. 추가 없음 정보는 알림자에서 리스너로 전달됩니다. 따라서, 일반적으로 전달해야 하는 실제 데이터는 데이터베이스 관계를 통해 전송됩니다. 일반적으로 상태 이름은 연관된 관계와 동일하지만 그렇지 않습니다. 연관된 관계가 존재하는 데 필요합니다.

libpq신청서 제출 LISTEN 및 일반 SQL 쿼리와 같은 UNLISTEN 명령입니다. 이어서 도착 NOTIFY 메시지 중 PQnotify()를 호출하여 감지할 수 있습니다.

  • PQ알림다음을 반환합니다 처리되지 않은 알림 메시지 목록에서 알림 백엔드에서 받았습니다. 없는 경우 NULL을 반환합니다. 대기 중인 알림. 알림이 다음에서 반환되면 PQ알림, 처리된 것으로 간주되어 제거됩니다. 알림 목록입니다.

    PGnotify* PQnotify(PGconn *conn);
    
    typedef 구조체 pgNotify 
        char relname[NAMEDATALEN];       /* 관계 이름
                                          * 데이터 포함 */
        int be_pid;                     /* 백엔드의 프로세스 ID */
     PGnotify;
    다음에서 반환된 PGnotify 개체를 처리한 후PQ알림, 반드시 다음을 사용하여 해제하세요.무료()메모리 누수를 방지하기 위해.

    참고:포스트그레6.4 이상,be_pid알림입니다 백엔드의 경우 이전 버전에서는 항상 자체 백엔드PID.

두 번째 샘플 프로그램은 다음의 사용 예를 제공합니다. 비동기 알림.

PQnotify()실제로 읽지 않습니다 백엔드 데이터; 이전에 흡수된 메시지를 반환할 뿐입니다. 또 다른libpq함수. 이전에는 릴리스libpq, 유일한 방법 NOTIFY 메시지를 적시에 수신하려면 지속적으로 비어 있는 쿼리라도 제출한 후 확인하세요.PQnotify()각각 이후PQexec(). 이것이 여전히 작동하는 동안에는 처리 능력의 낭비로 인해 더 이상 사용되지 않습니다.

NOTIFY 메시지가 없을 때 NOTIFY 메시지를 확인하는 더 좋은 방법 유용한 쿼리는 전화하는 것입니다.PQconsumeInput()그런 다음 확인하세요PQnotify(). 당신은 사용할 수 있습니다선택(2) 백엔드 데이터가 도착할 때까지 기다리며, 따라서 no를 사용함CPU힘이 없으면 할 일이 있습니다. (참조PQsocket()파일 설명자 번호를 얻으려면 와 함께 사용하다선택.) 참고하세요. 다음으로 쿼리를 제출하면 제대로 작동합니다.PQsendQuery/PQgetResult또는 간단히 사용PQexec. 당신은해야합니다 하지만 꼭 확인하세요.PQnotify()각각 이후PQgetResult또는PQexec, 알림이 수신되었는지 확인 쿼리를 처리하는 동안.