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