이 문서는 지원되지 않는 버전의 윈 토토 용입니다.
당신은에 대해 같은 페이지를 볼 수 있습니다PostgreSQL : 문서 : 17 : 메이저 토토버전 또는 위에 나열된 다른 지원 버전 중 하나입니다.

윈 토토

이름

알림-알림 생성

시놉시스

윈 토토채널[,Payload]

설명

the윈 토토명령은 알림을 보냅니다 선택 사항과 함께 이벤트"페이로드"각 클라이언트 응용 프로그램에 문자열 이전에 실행 된듣기채널지정된 채널 이름의 경우 현재 데이터베이스에서. 알림은 모두가 보입니다 사용자.

윈 토토간단한 간호사를 제공합니다 액세스하는 프로세스 모음을위한 통신 메커니즘 같은윈 토토데이터베이스. 에이 페이로드 문자열은 알림과 함께 보낼 수 있으며 구조화 된 데이터를 전달하기위한 더 높은 수준의 메커니즘은 데이터베이스에서 테이블을 사용하여 Notifier의 추가 데이터를 전달합니다. 청취자에게.

알림 이벤트를 위해 클라이언트에게 전달 된 정보 알림 채널 이름, 알림 세션이 포함되어 있습니다 서버 프로세스PID페이로드 문자열, 그렇지 않은 경우 빈 문자열입니다. 지정.

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

언제윈 토토특정 테이블 변경, 유용한 프로그래밍 발생 기술은를 넣는 것입니다.알림규칙적으로 그것은 테이블 업데이트에 의해 트리거됩니다. 이런 식으로 알림 테이블이 변경되면 자동으로 발생합니다 응용 프로그램 프로그래머는 실수로 그렇게하는 것을 잊을 수 없습니다.

윈 토토SQL 트랜잭션과 상호 작용합니다 몇 가지 중요한 방법으로. 첫째, A윈 토토는 트랜잭션 내부에서 실행됩니다 이벤트는 거래가 없을 때까지 전달되지 않습니다. 헌신적인. 거래가 있다면 이것은 적절합니다 중단되면, 그 내의 모든 명령은를 포함하여 효과가 없었습니다.윈 토토. 그러나 하나는 당황 할 수 있습니다 알림 이벤트가 즉시 전달 될 것으로 예상하고 있습니다. 둘째, 청취 세션이 알림 신호를받는 경우 거래 내에있는 동안 알림 이벤트는 직후까지 연결된 클라이언트에게 전달됩니다. 거래가 완료되었습니다 (커밋 또는 중단). 다시, 추론은 알림이 나중에 중단 된 거래는 알림을 원할 것입니다. 어떻게 든 취소하는 것은 - 그러나 서버는 할 수 없다"테이크"일단 알림을 보내면 클라이언트. 따라서 알림 이벤트는 그 사이에만 전달됩니다 업무. 이것의 결과는를 사용하는 응용 프로그램이라는 것입니다.윈 토토실시간 신호를 위해 시도해야합니다 거래를 짧게 유지하려면

동일한 채널 이름이 동일한 페이로드 문자열 인 데이터베이스와 동일한 트랜잭션 서버는 단일 알림 만 전달하기로 결정할 수 있습니다. 에 다른 한편으로, 뚜렷한 페이로드 문자열을 가진 알림은 항상됩니다 뚜렷한 알림으로 전달됩니다. 마찬가지로 알림 다른 거래에서는 하나로 접히지 않을 것입니다 공고. 중복의 나중에 삭제하는 것을 제외하고 알림,윈 토토동일한 트랜잭션의 알림이 순서대로 전달됩니다. 그들은 보내졌다. 또한 다른 메시지가 다른 것을 보장합니다 거래는 거래 순서대로 전달됩니다. 헌신적인.

실행하는 클라이언트에 일반적입니다윈 토토동일한 알림을 듣고 있습니다 채널 자체. 이 경우 알림 이벤트를 되 찾을 수 있습니다. 다른 모든 청취 세션과 마찬가지로. 에 따라 응용 프로그램 논리, 이것은 예를 들어 쓸모없는 작업을 초래할 수 있습니다. 해당 세션과 동일한 업데이트를 찾기 위해 데이터베이스 테이블을 읽으십시오. 방금 썼습니다. 눈치 채움으로 그러한 추가 작업을 피할 수 있습니다. 알림 세션의 서버 프로세스 여부PID(알림 이벤트에 제공됨 메시지)는 자신의 세션과 동일합니다PID(이용 가능libpq). 그들이 동일 할 때 알림 이벤트 무시.

매개 변수

채널

신호를받을 알림 채널의 이름 (Any 식별자).

Payload

the"페이로드"문자열 알림과 함께 전달됩니다. 이것은 다음과 같이 지정해야합니다 간단한 문자열 문자. 기본 구성에서는해야합니다 8000 바이트보다 짧습니다. (이진 데이터 또는 많은 양의 경우 정보를 전달해야합니다. 데이터베이스 테이블 및 레코드의 키를 보내십시오.)

노트

전송 된 알림을 보유하는 큐가 있습니다. 그러나 모든 청취 세션에서 아직 처리되지는 않았습니다. 이 대기열이라면 완전 해집니다, 거래 호출윈 토토커밋에 실패합니다. 대기열은 상당히 큽니다 (표준 8GB 설치) 거의 모든 용도로 충분히 크기가 있어야합니다. 사례. 그러나 세션이 실행되면 정리가 발생할 수 없습니다듣기그런 다음 a 아주 오랜 시간. 대기열이 절반으로 가득 차면 경고가 표시됩니다. 로그 파일에서 방지하는 세션을 가리키는 대청소. 이 경우이 세션이 끝나야하는지 확인해야합니다. 정리가 진행될 수 있도록 현재 거래.

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

pg_윈 토토

알림을 보내려면 함수를 사용할 수도 있습니다pg_윈 토토(텍스트, 텍스트). 기능 채널 이름을 첫 번째 인수로, 페이로드는 두번째. 기능은 사용하기가 훨씬 쉽습니다윈 토토명령이 아닌 상태에서 작업 해야하는 경우 명령 채널 이름 및 페이로드.

​​예

청취/통지 시퀀스 구성 및 실행PSQL:

가상 듣기;
가상 알림;
PID 8448을 사용한 서버 프로세스에서 수신 된 비동기 알림 "Virtual".
가상으로 '이것은 페이로드입니다';
PID 8448을 사용한 서버 프로세스에서받은 페이로드입니다.

foo를 들어라;
pg_윈 토토를 선택하십시오 ( 'fo'|| 'o', 'pay'|| 'load');
PID 14728을 사용한 서버 프로세스에서 수신 된 페이로드 "페이로드"가 포함 된 비동기 알림 "foo"

호환성

없음윈 토토SQL의 명령문 기준.