포스트그레비동기 지원 LISTEN 및 NOTIFY 명령을 통해 알림. 백엔드 특정 통지 조건에 대한 관심을 등록합니다. LISTEN 명령(UNLISTEN으로 듣기를 중지할 수 있음) 명령). 특정 조건을 수신하는 모든 백엔드는 해당 조건 이름의 NOTIFY가 다음과 같을 때 비동기적으로 알림을 받습니다. 모든 백엔드에서 실행됩니다. 추가 정보는 다음에서 전달되지 않습니다. 청취자에게 알리는 사람입니다. 따라서 일반적으로 실제 데이터는 의사소통이 필요한 사항은 데이터베이스를 통해 전송됩니다. 관계. 일반적으로 조건 이름은 연관된 이름과 동일합니다. 관계가 있지만 관련이 반드시 있어야 하는 것은 아닙니다. 관계.
libpq신청서 제출 LISTEN 및 일반 SQL 쿼리와 같은 UNLISTEN 명령입니다. 그 후, 도착 NOTIFY 메시지는 PQnotify()를 호출하여 감지할 수 있습니다.
PQ토토 사이트다음을 반환합니다 처리되지 않은 알림 메시지 목록에서 알림 백엔드에서 받았습니다. 보류 중인 항목이 없으면 NULL을 반환합니다. 알림. PQnotify에서 알림이 반환되면, 처리된 것으로 간주되어 목록에서 제거됩니다. 알림.
PGnotify* PQnotify(PGconn *conn);
typedef 구조체 pgNotify
char relname[NAMEDATALEN]; /* 관계 이름
* 데이터 포함 */
int be_pid; /* 백엔드의 프로세스 ID */
PGnotify;PQnotify가 반환한 PGnotify 개체를 처리한 후
메모리 누수를 방지하려면 free()를 사용하여 해제해야 합니다. 참고:포스트그레6.4 이상, be_pid
알림 백엔드의 것인 반면, 이전 버전에서는
항상 자신의 백엔드 PID입니다.두 번째 샘플 프로그램은 다음의 사용 예를 보여줍니다. 비동기 알림.
PQnotify()는 실제로 백엔드 데이터를 읽지 않습니다. 그냥 이전에 다른 메시지를 흡수한 메시지를 반환합니다.libpq함수. 이전 릴리스에서libpq, 적시에 수신할 수 있는 유일한 방법입니다. NOTIFY 메시지는 비어 있는 쿼리라도 지속적으로 쿼리를 제출하는 것이었습니다. 그런 다음 각 PQexec() 후에 PQnotify()를 확인하십시오. 아직까지는 작동하면 처리 능력을 낭비하므로 더 이상 사용되지 않습니다. 더 나은 유용한 쿼리가 없을 때 NOTIFY 메시지를 확인하는 방법 make는 PQconsumeInput()을 호출한 다음 PQnotify()를 확인하는 것입니다. 당신은 할 수 있습니다 백엔드 데이터가 도착할 때까지 기다리려면 select(2)를 사용하십시오. 딱히 할 일이 없으면 CPU 파워. 이것이 작동한다는 점에 유의하십시오. PQsendQuery/PQgetResult를 사용하든 일반 PQexec를 사용하든 OK입니다. 쿼리. 그러나 다음 후에 PQnotify()를 확인하는 것을 기억해야 합니다. 알림이 수신되었는지 확인하기 위해 각 PQgetResult 또는 PQexec 쿼리를 처리하는 동안.