DBMS_ALERT
개요
DBMS_ALERT은 알림을 등록하고, 보내고, 받을 수 있는 기능을 지원하는 패키지이다.
REGISTER(name)
n/a
기다릴 ALERT을 등록하는 프로시저이다.
REMOVE(name)
n/a
등록된 ALERT을 제거하는 프로시저이다.
REMOVEALL
n/a
등록된 모든 ALERT을 제거하는 프로시저이다. - PostgreSQL Version 15 이상부터 사용 가능하다.
SIGNAL(name, message)
n/a
ALERT을 발생시켜 이를 기다리고 있는 세션들을 깨워주는 프로시저이다.
WAITANY(name OUT, message OUT, status OUT, timeout)
n/a
어떠한 종류든 내가 등록한 ALERT을 기다리는 프로시저이다. - PostgreSQL Version 15 이상부터 사용 가능하다.
WAITONE(name, message OUT, status OUT, timeout)
n/a
특정 ALERT을 기다리는 프로시저이다.
권한
설치는 super user에 이루어져야 하고 관리자가 DBMS_ALERT 스키마 접근 권한 부여한 유저만 접근 가능하다.
구성
본 절에서는 DBMS_ALERT 패키지에서 제공하는 프로시저를 알파벳 순으로 설명한다.
상수
MAXWAIT
INTEGER
86400000
알림을 기다릴 수 있는 최대 시간이다.(1000일, 사실상 영원하다.)
REGISTER
기다릴 ALERT을 등록하는 프로시저이다. 등록된 ALERT은 REGISTER 프로시저를 수행한 세션에서만 유효하다. 중복해서 등록할 필요는 없다(무시됨). 다른 세션에서 ALERT을 기다리려면 새로 등록해야 한다.
프로토타입
DBMS_ALERT.REGISTER
(
name IN TEXT
);
파라미터
name
등록/기다릴 ALERT의 이름이다.
예제
CALL DBMS_ALERT.REGISTER('ABC');
REMOVE
등록된 ALERT을 제거하는 프로시저이다. 이 프로시저는 프로시저를 수행하는 세션에만 영향을 준다. 즉, 다른 세션에서 등록한 동일 이름에 대해서는 영향을 주지 않는다. 등록되지 않은 ALERT을 REMOVE 하려고 하면 에러가 발생한다.
프로토타입
DBMS_ALERT.REMOVE
(
name IN TEXT
);
파라미터
name
제거할 ALERT의 이름이다.
예제
CALL DBMS_ALERT.REMOVE('ABC');
REMOVEALL
등록된 모든 ALERT을 제거하는 프로시저이다. 이 프로시저는 프로시저를 수행하는 세션에만 영향을 준다. 즉, 다른 세션에서 등록한 동일 이름에 대해서는 영향을 주지 않는다.
PostgreSQL Version 15 이상부터 사용 가능하다.
프로토타입
DBMS_ALERT.REMOVEALL();
예제
CALL DBMS_ALERT.REMOVEALL();
SIGNAL
ALERT을 발생시켜 이를 기다리고 있는 세션들을 깨워주는 프로시저이다.
프로토타입
DBMS_ALERT.SIGNAL
(
name IN TEXT,
message IN TEXT
);
파라미터
name
발생시킬 ALERT의 이름이다.
message
함께 전달할 메시지이다.
예제
CALL DBMS_ALERT.SIGNAL('ABC', 'DEF');
WAITANY
어떠한 종류든 내가 등록한 ALERT을 기다리는 프로시저이다. 세션에서 이전에 등록했던 ALERT이 발생한 경우 깨어난다. 또한 타임아웃이 지나면 깨어날 수 있다. 특정 ALERT을 받아서 깨어나도 해당 ALERT이 자동으로 REMOVE 되지 않는다.
PostgreSQL Version 15 이상부터 사용 가능하다.
프로토타입
DBMS_ALERT.WAITANY
(
name OUT TEXT,
message OUT TEXT,
status OUT INTEGER,
timeout IN NUMERIC DEFAULT MAXWAIT
);
파라미터
name
WAITANY 프로시저가 깨어나도록 한 ALERT의 이름이다. 타임아웃으로 깨어난 경우 값이 없다.
message
WAITANY 프로시저가 깨어나도록 한 ALERT와 함께 전달된 메시지이다. 타임아웃으로 깨어난 경우 값이 없다.
status
1 : 타임아웃으로 깨어난 경우이다. 0 : ALERT이 발생해서 깨어난 경우이다.
timeout
얼마나 기다릴지 설정하는 값이다. (단위: seconds)
예제
DO $$
declare
stack text;
event_name text;
message text;
rc int;
BEGIN
call dbms_alert.waitany(event_name, message, rc, timeout);
stack := 'event: ' || coalesce(event_name, 'NULL') || ', message: ' || coalesce(message, 'NULL') || ', return_code: ' || rc;
return stack;
END;
$$ language plpgsql;
WAITONE
특정 ALERT를 기다리는 프로시저이다. 이전에 등록했던 ALERT만 기다릴 수 있으며, 등록하지 않은 ALERT를 지정하는 경우 에러가 발생한다. 또한 timeout이 지나면 깨어날 수 있다. 특정 ALERT를 받아서 깨어나도 해당 ALERT이 자동으로 REMOVE 되지 않는다.
프로토타입
DBMS_ALERT.WAITONE
(
name IN TEXT,
message OUT TEXT,
status OUT INTEGER,
timeout IN NUMERIC DEFAULT MAXWAIT
);
파라미터
name
기다릴 ALERT의 이름이다.
message
ALERT와 함께 전달된 메시지이다.
타임아웃으로 깨어난 경우 값이 없다.
status
1 : 타임아웃으로 깨어난 경우이다.
0 : ALERT가 발생해서 깨어난 경우이다.
timeout
얼마나 기다릴지 설정하는 값이다. (단위: seconds)
예제
DO $$
declare
stack text;
message text;
rc int;
BEGIN
call dbms_alert.waitone(event_name, message, rc, timeout);
stack := 'message: ' || coalesce(message, 'NULL') || ', return_code: ' || rc;
return stack;
END;
$$ language plpgsql;
Last updated