theNotify명령은 토토 캔 이벤트를 보냅니다 이전에 실행 된 각 프론트 엔드 애플리케이션에듣기NotifyName지정된 토토 캔의 경우 현재 데이터베이스의 조건.
토토 캔 이벤트를 위해 프론트 엔드로 전달 된 정보 토토 캔 조건 이름과 토토 캔 백엔드가 포함되어 있습니다 프로세스의 PID. 데이터베이스 디자이너에 달려 있습니다. 주어진 데이터베이스에서 사용될 조건 이름과 각각은 의미합니다.
일반적으로 토토 캔 조건 이름은 이름과 동일합니다. 데이터베이스의 일부 테이블과 본질적으로 토토 캔 이벤트 수단"이 테이블을 변경했습니다 새로운 것이 무엇인지보기 위해 ". 그러나 그러한 연관성은 시행되지 않습니다 에 의해Notify및듣기명령. 예를 들어, 데이터베이스 디자이너 여러 가지 다른 조건 이름을 사용하여 다른 신호를 보낼 수 있습니다 단일 테이블에 대한 종류의 변경.
토토 캔간단한 형태의 신호를 제공합니다 또는 IPC (IPCESS Communication)의 수집을위한 메커니즘 동일한 액세스 프로세스PostgreSQL데이터베이스. 더 높은 수준의 메커니즘 데이터베이스에서 테이블을 사용하여 추가 전달을 통해 구축 할 수 있습니다. Notifier에서 데이터 (단순한 조건 이름을 넘어서) 리스너 (들).
언제Notify특정 테이블 변경, 유용한 프로그래밍 발생 기술은를 넣는 것입니다.Notify규칙적으로 그것은 테이블 업데이트에 의해 트리거됩니다. 이런 식으로 토토 캔 테이블이 변경되면 자동으로 발생합니다 응용 프로그램 프로그래머는 실수로 그렇게하는 것을 잊을 수 없습니다.
NotifySQL 트랜잭션과 상호 작용합니다 몇 가지 중요한 방법으로. 첫째, ANotify는 트랜잭션 내부에서 실행됩니다 이벤트는 거래가 없을 때까지 전달되지 않습니다. 헌신적인. 거래가 있다면 이것은 적절합니다 우리는 그 안에있는 모든 명령이 를 포함한 효과Notify. 그러나 그것은 될 수 있습니다 토토 캔 이벤트가 될 것으로 예상되는 경우 당황 즉시 전달됩니다. 둘째, 청취 백엔드가 수신되는 경우 트랜잭션 내에있는 동안 토토 캔 신호, 토토 캔 이벤트는 단지 연결된 프론트 엔드로 전달되지 않습니다. 거래가 완료된 후 (커밋 또는 중단). 다시, 추론은 통지가 나중에 중단 된 거래는 원할 것입니다 어떻게 든 취소하라는 토토 캔 ---하지만 백엔드는 할 수 없습니다"테이크"일단 발송되면 토토 캔 프론트 엔드에. 따라서 토토 캔 이벤트는 그 사이에만 전달됩니다 업무. 이것의 결과는를 사용하는 응용 프로그램이라는 것입니다.Notify실시간 신호를 위해 시도해야합니다 거래를 짧게 유지하려면
Notify하나는 Unix 신호처럼 동작합니다 중요한 존중 : 동일한 조건 이름이 신호를받는 경우 빠른 연속으로 여러 번 수신자는 하나만 얻을 수 있습니다. 여러 실행에 대한 이벤트 토토 캔Notify. 그래서 숫자에 의존하는 것은 나쁜 생각입니다 수신 된 토토 캔. 대신 사용Notify무언가에주의를 기울여야하는 응용 프로그램을 깨우려면 데이터베이스 개체 (예 : 시퀀스)를 사용하여 추적하십시오. 무슨 일이 있었는지 또는 몇 번이나 일어 났는지.
보내는 프론트 엔드에 일반적입니다Notify동일한 토토 캔 이름으로 듣는 것입니다 그 자체. 이 경우, 그것은 마찬가지로 토토 캔 이벤트를 되 찾을 것입니다. 다른 모든 청취 전면. 응용 프로그램에 따라 논리, 이것은 쓸모없는 작업을 초래할 수 있습니다. 동일한 업데이트를 찾으려면 데이터베이스 테이블을 다시 읽으십시오. 프론트 엔드가 방금 썼다. 안에PostgreSQL6.4 이후에는 가능합니다 백엔드 토토 캔 여부를 알면 그러한 추가 작업을 피하십시오. Process의 PID (Notify 이벤트 메시지에 제공됨)는 동일합니다. 자신의 백엔드 PID (LIBPQ에서 제공)로서. 그들이있을 때 마찬가지로, 토토 캔 이벤트는 자신의 작품이며 무시할 수 있습니다. (이전에 말한 내용에도 불구하고 단락, 이것은 안전한 기술입니다.PostgreSQL자체적으로 자체적으로 보관합니다 다른 백엔드에서 도착하는 것을 알리므로 놓칠 수 없습니다. 자신의 통지를 무시함으로써 토토 캔 외부.)
이름유효한 문자열 일 수 있습니다 이름으로; 실제 이름에 해당 할 필요는 없습니다. 테이블. 만약에이름두 배, 구문 적으로 유효한 이름 일 필요는 없습니다. 그러나 최대 31 자 길이의 줄이 될 수 있습니다.
이전의 일부 릴리스에서PostgreSQL, 이름이중 인용물로 둘러싸여 있어야했습니다 기존 테이블 이름에 해당하지 않았을 때도 구문 적으로 이름으로 유효합니다. 더 이상 필요하지 않습니다.
inPostgreSQL릴리스 6.4 이전에 토토 캔 메시지로 전달 된 백엔드 PID는 항상 프론트 엔드 자신의 백엔드의 PID. 그래서 그렇지 않았습니다 자신의 통지를 다른 고객과 구별 할 수 있습니다. 이전 릴리스에서 알립니다.