2025년 9월 25일:토토 커뮤니티 : 토토
이 문서는 지원되지 않는 윈 토토 버전에 대한 것입니다.
당신은 다음과 같은 페이지를 보고 싶을 수도 있습니다.PostgreSQL : 문서 : 17 : 메이저 토토 사이트버전 또는 위에 나열된 다른 지원 버전 중 하나를 사용하세요.

알림

이름

NOTIFY -- 알림 생성

시놉시스

알림채널 [ , 페이로드 ]

설명

알림명령이 알림을 보냅니다 선택 사항과 함께 이벤트"페이로드"문자열을 각 클라이언트 응용프로그램에 이전에 실행됨듣기채널지정된 채널 이름에 대해 현재 데이터베이스에서. 알림은 모든 사람에게 표시됩니다. 사용자.

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

알림 이벤트를 위해 클라이언트에 전달된 정보 알림 채널 이름, 알림 세션의 이름이 포함됩니다. 서버 프로세스PID, 그리고 페이로드 문자열(페이로드 문자열이 없으면 빈 문자열임) 지정되었습니다.

채널 이름을 정의하는 것은 데이터베이스 디자이너의 몫입니다 이는 특정 데이터베이스에서 사용될 것이며 각각의 의미입니다. 일반적으로 채널 이름은 다음의 일부 테이블 이름과 동일합니다. 데이터베이스 및 알림 이벤트는 본질적으로 다음을 의미합니다."나는 이 테이블을 변경했습니다. 어떤 내용인지 한번 살펴보세요 새로운". 그러나 그러한 연관성은 다음과 같이 시행되지 않습니다.알림그리고듣기명령. 예를 들어, 데이터베이스 디자이너는 여러 가지 다른 방법을 사용할 수 있습니다. 단일 채널에 대한 다양한 종류의 변경 사항을 알리는 채널 이름 테이블. 또는 페이로드 문자열을 사용하여 다양한 경우를 구별하세요.

언제알림은(는) 신호를 보내는 데 사용됩니다. 특정 테이블에 대한 변경 발생, 유용한 프로그래밍 기술은 다음을 넣는 것입니다.알림규칙에서 이는 테이블 업데이트에 의해 트리거됩니다. 이로써 알림 테이블이 변경되면 자동으로 발생하며 애플리케이션 프로그래머는 실수로 이를 잊어버릴 수 없습니다.

알림SQL 트랜잭션과 상호작용 몇 가지 중요한 방법으로. 첫째, 만일 a알림트랜잭션 내에서 실행되며 알림 이벤트는 거래가 완료될 때까지 전달되지 않습니다. 헌신했다. 거래가 다음과 같으므로 이는 적절합니다. 중단되었습니다. 포함된 모든 명령은 효과가 없습니다.알림. 하지만 만약 하나라면 당황스러울 수 있다 에서는 알림 이벤트가 즉시 전달될 것으로 예상하고 있습니다. 둘째, 청취 세션이 알림 신호를 수신하는 경우 트랜잭션 내에 있는 동안에는 알림 이벤트가 발생하지 않습니다. 직후까지 연결된 클라이언트에 전달됩니다. 트랜잭션이 완료되었습니다(커밋되거나 중단됨). 다시 말하지만, 그 이유는 통지가 나중에 중단된 거래인 경우 알림을 원할 것입니다. 어떻게든 취소할 수 있지만 서버는 그럴 수 없습니다."철회"다음으로 보낸 알림 클라이언트. 따라서 알림 이벤트는 다음 사이에만 전달됩니다. 거래. 결과적으로 다음을 사용하는 애플리케이션은알림실시간 신호를 보내려면 다음을 시도해야 합니다. 거래를 짧게 유지하기 위해.

동일한 채널 이름이 여러 번 신호를 받는 경우 동일한 페이로드 문자열을 가진 동일한 트랜잭션, 데이터베이스 서버는 단일 알림만 전달하기로 결정할 수 있습니다. 에 반면, 고유한 페이로드 문자열이 있는 알림은 항상 별도의 알림으로 전달됩니다. 마찬가지로 알림 서로 다른 거래에서 발생하는 거래는 절대로 하나로 합쳐지지 않습니다. 알림. 나중에 중복된 인스턴스를 삭제하는 것을 제외하고 알림,알림다음을 보장합니다 동일한 거래의 알림이 주문대로 전달됩니다. 그들은 보내졌습니다. 또한 다른 곳에서 온 메시지도 보장됩니다. 거래는 거래 순서대로 전달됩니다. 헌신했습니다.

실행하는 클라이언트에 일반적입니다알림동일한 알림을 듣고 있습니다 채널 자체. 이 경우 알림 이벤트가 반환됩니다. 다른 모든 청취 세션과 마찬가지로요. 에 따라 애플리케이션 로직을 사용하면 쓸모없는 작업이 발생할 수 있습니다. 예를 들어 해당 세션과 동일한 업데이트를 찾기 위해 데이터베이스 테이블 읽기 방금 썼습니다. 이러한 추가 작업을 알아차림으로써 방지할 수 있습니다. 통지 세션의 서버 프로세스 여부PID(알림 이벤트에 제공됨) 메시지)는 자신의 세션과 동일PID(다음에서 사용 가능libpq). 동일할 때, 알림 이벤트는 자신의 작업이 다시 반송되는 것으로, 무시됩니다.

매개변수

채널

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

페이로드

"페이로드"문자열 알림과 함께 전달되었습니다. 이는 다음과 같이 지정되어야 합니다. 간단한 문자열 리터럴. 기본 구성에서는 다음과 같아야 합니다. 8000바이트보다 짧습니다. (바이너리 데이터 또는 대량의 데이터인 경우 정보는 전달되어야 하며, 이를 보고서에 넣는 것이 가장 좋습니다. 데이터베이스 테이블을 작성하고 레코드 키를 보냅니다.)

참고

보낸 알림을 보관하는 대기열이 있습니다. 하지만 아직 모든 청취 세션에서 처리되지는 않았습니다. 만약 이 대기열 가득 차서 트랜잭션 호출알림커밋 시 실패합니다. 대기열이 상당히 큽니다(표준 8GB). 설치) 거의 모든 용도에 충분한 크기여야 합니다. 사건. 그러나 세션이 실행되면 정리가 수행되지 않습니다.듣기그런 다음 다음에 대한 거래를 입력합니다. 아주 오랜만이야. 대기열이 절반쯤 차면 경고가 표시됩니다. 방해하는 세션을 가리키는 로그 파일에서 청소. 이 경우 이 세션이 종료되는지 확인해야 합니다. 정리가 진행될 수 있도록 현재 트랜잭션을 처리합니다.

실행된 트랜잭션알림2단계 커밋을 준비할 수 없습니다.

pg_윈 토토

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

다음에서 수신/알림 시퀀스 구성 및 실행psql:

가상 듣기;
가상으로 알림;
PID 8448을 사용하는 서버 프로세스로부터 비동기 알림 "가상"이 수신되었습니다.
NOTIFY virtual, '이것이 페이로드입니다';
PID 8448을 사용하는 서버 프로세스에서 수신된 페이로드 "이것은 페이로드입니다"가 포함된 비동기 알림 "가상"입니다.

들어봐 foo;
SELECT pg_윈 토토('fo' || 'o', '지불' || '로드');
PID 14728을 사용하는 서버 프로세스에서 수신된 페이로드 'payload'가 포함된 비동기 알림 'foo'.

호환성

없습니다알림SQL의 문 표준.