theNotify명령은 a 선택 사항과 함께 와이즈 토토 이벤트"페이로드"각 클라이언트 응용 프로그램에 문자열이 있습니다 이전에 실행되었습니다듣기채널지정된 채널 이름의 경우 현재 데이터베이스에서.
Notify간단한 간호사를 제공합니다 프로세스 액세스 수집을위한 커뮤니케이션 메커니즘 같은postgresql데이터베이스. 에이 페이로드 문자열은 와이즈 토토과 함께 보낼 수 있으며 구조화 된 데이터를 전달하기위한 더 높은 수준의 메커니즘을 구축 할 수 있습니다 데이터베이스의 테이블을 사용하여 추가 데이터를 전달합니다. 듣는 사람에게 알리기 (들).
알림 이벤트를 위해 클라이언트에게 전달 된 정보 알림 채널 이름, 알림 세션이 포함되어 있습니다 서버 프로세스PID페이로드 문자열, 그렇지 않은 경우 빈 문자열입니다. 지정.
채널 이름을 정의하는 것은 데이터베이스 디자이너에 달려 있습니다. 주어진 데이터베이스 및 각 데이터베이스에서 사용됩니다. 일반적으로 채널 이름은 일부 테이블의 이름과 동일합니다. 데이터베이스 및 알림 이벤트는 본질적으로를 의미합니다."이 테이블을 변경했습니다. 새로운 것이 무엇인지보기 ". 그러나 그러한 연관성은 시행되지 않습니다 그만큼Notifyand듣기명령. 예를 들어, 데이터베이스 디자이너 여러 다른 채널 이름을 사용하여 다른 신호를 보낼 수 있습니다 단일 테이블에 대한 종류의 변경. 또는 페이로드 문자열은 다양한 경우를 구별하는 데 사용될 수 있습니다.
언제Notify특정 테이블 변경, 유용한 프로그래밍 발생 기술은를 넣는 것입니다.Notify규칙적으로 그것은 테이블 업데이트에 의해 트리거됩니다. 이런 식으로 와이즈 토토 테이블이 변경되면 자동으로 발생합니다 응용 프로그램 프로그래머는 실수로 그렇게하는 것을 잊을 수 없습니다.
NotifySQL과 상호 작용합니다 몇 가지 중요한 방식으로 거래. 첫째, ANotify거래 내부에서 실행됩니다 이벤트 와이즈 토토 이벤트는 거래가 진행될 때까지 전달되지 않습니다. 커밋되었습니다. 거래가 있다면 이것은 적절합니다 중단되면, 그 내의 모든 명령은를 포함하여 효과가 없었습니다.Notify. 그러나 그것은 당황 할 수 있습니다 하나는 와이즈 토토 이벤트가 전달 될 것으로 기대하고 있습니다 즉시. 둘째, 청취 세션이 a 와이즈 토토 신호는 트랜잭션 내에있는 동안 와이즈 토토 이벤트는 연결된 클라이언트에게 전달되지 않습니다. 거래가 완료된 직후까지 (커밋 또는 중단). 다시 한 번, 추론은 와이즈 토토이 있다면 나중에 중단 된 거래 내에서 전달되면 어쨌든 와이즈 토토이 취소되기를 원하지만 서버 할 수 없음"테이크"한 번 와이즈 토토 클라이언트에게 보냈습니다. 따라서 와이즈 토토 이벤트는 전용입니다 거래간에 전달. 이것의 상승은 그 것입니다 사용 사용 응용 프로그램Notify실시간 신호는 거래를 짧게 유지하려고 노력해야합니다.
동일한 채널 이름이 동일한 페이로드 문자열 인 데이터베이스와 동일한 트랜잭션 서버는 단일 알림 만 전달하기로 결정할 수 있습니다. 에 다른 한편으로, 뚜렷한 페이로드 문자열이있는 알림은 것입니다 항상 뚜렷한 알림으로 전달됩니다. 비슷하게, 다른 트랜잭션의 알림은 접히지 않습니다 하나의 알림으로. 나중에 인스턴스를 떨어 뜨리는 것을 제외하고 중복 알림,Notify동일한 트랜잭션의 와이즈 토토이 얻는 것을 보장합니다 그들이 보내진 순서대로 배달. 또한 보장됩니다 다른 트랜잭션의 메시지는 순서대로 전달됩니다 거래가 저지른 것.
실행하는 클라이언트에 일반적입니다Notify동일한 알림을 듣고 있습니다 채널 자체. 이 경우 알림을받습니다 다른 모든 청취 세션과 마찬가지로 이벤트. 에 따라 응용 프로그램 논리, 이것은 쓸모없는 작업을 초래할 수 있습니다. 예를 들어, 데이터베이스 테이블을 읽으려면 동일한 업데이트를 찾으십시오. 그 세션은 방금 썼습니다. 그러한 추가를 피할 수 있습니다 세션 알림의 서버 프로세스 여부를 알아 차림으로써 작동PID( 와이즈 토토 이벤트 메시지)는 자신의 세션과 동일합니다PID(이용 가능libpq). 그들이 동일 할 때 와이즈 토토 이벤트는 자신의 작업이며 무시됩니다.
알림 채널의 이름을 신호하십시오 (Aly 식별자).
the"페이로드"문자열 와이즈 토토과 함께 전달됩니다. 이것은해야합니다 간단한 문자열 문자로 지정됩니다. 기본값에서 구성 8000 바이트보다 짧아야합니다. (만약에 이진 데이터 또는 많은 양의 정보가 의사 소통, 데이터베이스 테이블에 넣는 것이 가장 좋습니다. 기록의 키를 보내십시오.)
전송 된 와이즈 토토을 보유하는 큐가 있습니다. 그러나 모든 청취 세션에서 아직 처리되지는 않았습니다. 이 대기열이라면 완전 해집니다, 거래 호출Notify커밋에 실패합니다. 대기열은 꽤 있습니다 대형 (표준 설치의 8GB)과 충분히 여야합니다. 거의 모든 사용 사례에 크기가 있습니다. 그러나 청소는 아무것도 필요하지 않습니다 세션이 실행되는 경우듣기및 그런 다음 아주 오랫동안 거래에 들어갑니다. 일단 대기열이 있습니다 반 충만 정리를 방지하는 세션. 이 경우 당신은해야합니다 이 세션은 현재 거래를 종료하여 정리가 진행될 수 있습니다.
실행 된 거래Notify2 상을 준비 할 수 없습니다 저지르다.
듣기 및 실행/실행/실행PSQL:
가상 듣기; 가상 알림; PID 8448을 사용한 서버 프로세스에서 수신 된 비동기 알림 "Virtual". 가상으로 '이것은 페이로드입니다'; PID 8448을 사용한 서버 프로세스에서받은 페이로드입니다. foo를 들어라; pg_notify를 선택하십시오 ( 'fo'|| 'o', 'pay'|| 'load'); PID 14728을 사용한 서버 프로세스에서 수신 된 페이로드 "페이로드"가 포함 된 비동기 알림 "foo"
이전 | 홈 | 19488_19494 |
움직임 | up | 준비 |