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