지원 버전 :현재(17) /16 / 15 / 14 / 13
개발 버전 :18 / 5002_5009
지원되지 않는 버전 :12 / 11 / 10 / 9.6 / 9.5 / 9.4 / 9.3 / 9.2 / 9.1 / 9.0 / 8.4 / 8.3 / 8.2 / 8.1 / 8.0 / 7.4 / 7.3 / 7.2 / 7.1
이 문서는 지원되지 않는 버전의 PostgreSQL을위한 것입니다.
당신은에 대해 같은 페이지를 보려고 할 수 있습니다현재버전 또는 위에 나열된 다른 지원 버전 중 하나입니다.

Notify

알림 - 알림 생성

시놉시스

Notify채널[,Payload]

설명

theNotify명령은 선택 사항과 함께 알림 이벤트를 보냅니다Payload이전에 실행 된 각 클라이언트 응용 프로그램에 대한 문자열듣기채널현재 데이터베이스의 지정된 채널 이름의 경우. 모든 사용자에게 알림이 표시됩니다.

Notify동일하게 액세스하는 프로세스 모음에 대한 간단한 간호사 통신 메커니즘을 제공합니다postgresql데이터베이스. 페이로드 문자열은 알림과 함께 전송 될 수 있으며, 데이터베이스의 테이블을 사용하여 알림에서 리스너로 추가 데이터를 전달하여 구조화 된 데이터를 전달하기위한 고급 메커니즘을 구축 할 수 있습니다..

알림 이벤트를 위해 클라이언트에 전달 된 정보에는 알림 채널 이름, 알림 세션의 서버 프로세스가 포함tỷ lệ kèo bóng đá tối nay및 페이로드 문자열은 지정되지 않은 경우 빈 문자열입니다.

주어진 데이터베이스에서 사용될 채널 이름과 각각의 의미를 정의하는 것은 데이터베이스 디자이너에 달려 있습니다. 일반적으로 채널 이름은 데이터베이스의 일부 테이블 이름과 동일하며 알림 이벤트는 본질적으로 의미합니다.나는이 테이블을 변경했다.. 그러나 그러한 협회는에 의해 시행되지 않습니다.Notifyand듣기명령. 예를 들어, 데이터베이스 디자이너는 여러 다른 채널 이름을 사용하여 단일 테이블에 대한 다른 종류의 변경을 알 수 있습니다. 또는 페이로드 문자열은 다양한 경우를 구별하는 데 사용될 수 있습니다.

언제Notify특정 테이블에 대한 변경 사항이 발생하는 것을 알리는 데 사용됩니다. 유용한 프로그래밍 기술은를 넣는 것입니다.Notify표에서 테이블 업데이트로 트리거되는 진술 트리거에서. 이러한 방식으로 테이블이 변경되면 알림이 자동으로 발생하며 응용 프로그램 프로그래머는 실수로 실수로 수행하는 것을 잊을 수 없습니다.

Notify몇 가지 중요한 방법으로 SQL 트랜잭션과 상호 작용합니다. 첫째, ANotify트랜잭션 내부에서 실행됩니다. 거래가 커밋되지 않는 한, 알림 이벤트는 전달되지 않습니다. 거래가 중단되면 그 내의 모든 명령이 효과가 없었기 때문에 이것은 적절합니다.Notify. 그러나 알림 이벤트가 즉시 전달 될 것으로 예상하면 당황 할 수 있습니다. 둘째, 청취 세션이 트랜잭션 내에있는 동안 알림 신호를 수신하는 경우, 트랜잭션이 완료되기 전까지 (커밋 또는 중단)까지 알림 이벤트는 연결된 클라이언트에게 전달되지 않습니다. 다시 말하지만, 추론은 나중에 중단 된 거래 내에서 알림이 전달되면 알림이 어떻게 든 취소되기를 원하지만 서버는 할 수 없을 것입니다.가져 오는13879_14042Notify실시간 신호는 거래를 짧게 유지해야합니다.

동일한 채널 이름이 동일한 트랜잭션 내에서 동일한 페이로드 문자열로 여러 번 신호를 보내면 알림 이벤트의 한 인스턴스 만 청취자에게 전달됩니다. 반면, 뚜렷한 페이로드 문자열이있는 알림은 항상 뚜렷한 알림으로 전달됩니다. 마찬가지로, 다른 트랜잭션으로부터의 알림은 하나의 알림으로 접히지 않을 것입니다. 중복 알림 인스턴스를 삭제하는 것을 제외하고Notify동일한 트랜잭션의 알림이 전송 된 순서대로 전달되도록 보장합니다. 또한 다른 거래의 메시지가 거래가 저지른 순서대로 전달되는 것을 보장합니다.

실행하는 클라이언트에 일반적입니다Notify동일한 알림 채널 자체에서 듣고 있습니다. 이 경우 다른 모든 청취 세션과 마찬가지로 알림 이벤트를 다시 얻습니다. 응용 프로그램 논리에 따라 예를 들어 해당 세션과 동일한 업데이트를 찾기 위해 데이터베이스 테이블을 읽으면 쓸모없는 작업이 발생할 수 있습니다. 알림 세션의 서버 프로세스가에 대한 주목함으로써 그러한 추가 작업을 피할 수 있습니다tỷ lệ kèo bóng đá tối nay(알림 이벤트 메시지에 제공됨)는 자신의 세션과 동일합니다tỷ lệ kèo bóng đá tối nay(libpq15598_15702

매개 변수

채널

신호 전달 채널 이름 (식별자).

Payload

thePayload통지와 함께 통신 할 문자열. 이것은 간단한 문자열 문자로 지정되어야합니다. 기본 구성에서는 8000 바이트보다 짧아야합니다. (이진 데이터 또는 많은 양의 정보를 전달 해야하는 경우 데이터베이스 테이블에 넣고 레코드의 키를 보내는 것이 가장 좋습니다.)

노트

16674_16836Notify커밋에 실패합니다. 대기열은 상당히 크며 (표준 설치에서 8GB) 거의 모든 사용 사례에 대해 충분히 크기가 있어야합니다. 그러나 세션이 실행되면 정리가 발생할 수 없습니다듣기그런 다음 아주 오랫동안 거래를 시작합니다. 대기열이 절반으로 가득 차면 로그 파일의 경고가 정리를 방해하는 세션을 가리키는 경고를 볼 수 있습니다. 이 경우이 세션은 정리가 진행될 수 있도록 현재 트랜잭션을 종료해야합니다.

함수pg_notification_queue_usage현재 보류중인 알림에 의해 차지하고있는 대기열의 비율을 반환합니다. 보다섹션 9.27자세한 내용은

실행 된 거래Notify2 상 커밋을 준비 할 수 없습니다.

pg_notify

알림을 보내려면 함수를 사용할 수도 있습니다pg_notify(텍스트, 텍스트). 함수는 채널 이름을 첫 번째 인수로, 페이로드는 두 번째 인수로 간주합니다. 기능은 사용하기가 훨씬 쉽습니다Notify명확한 채널 이름 및 페이로드로 작업 해야하는 경우 명령.

예제

듣기 및 실행/실행/실행PSQL:

가상 듣기;
가상 알림;
tỷ lệ kèo bóng đá tối nay 8448을 사용한 서버 프로세스에서 수신 된 비동기 알림 "Virtual".
가상으로 '이것은 페이로드입니다';
tỷ lệ kèo bóng đá tối nay 8448을 사용한 서버 프로세스에서받은 페이로드입니다.

foo를 들어라;
pg_notify를 선택하십시오 ( 'fo'|| 'o', 'pay'|| 'load');
tỷ lệ kèo bóng đá tối nay 14728을 사용한 서버 프로세스에서 수신 된 페이로드 "페이로드"가 포함 된 비동기 알림 "foo"

호환성

없음NotifySQL 표준의 명령문.