PostgreSQL의 트리거와 펑션 예제
PostgreSQL의 트리거와 펑션 예제를 만들어 봤다.
자료를 찾는데 너무 힘들어서 나중에 잊기전에 정리해봤다.
● 우선 테스트용 테이블 작성
CREATE TABLE datalog(
logtime timestamp PRIMARY KEY,
data varchar,
content varchar
);
* 테이블 지우기
DROP TABLE datalog;
● 펑션(Function) 함수 예제
이 함수가 실행되면 지정 테이블의 레코드가 10개를 넘으면 가장 오래된 것부터 지운다.
CREATE FUNCTION data_fun() RETURNS trigger AS $data_fun$
DECLARE
rowcount integer;
delcount integer;
maxcount integer;
BEGIN
maxcount := 10;
SELECT count(*) logtime into rowcount FROM datalog;
delcount := rowcount - maxcount + 1;
IF delcount > 0 THEN
DELETE FROM datalog WHERE logtime IN (SELECT logtime FROM datalog ORDER BY logtime LIMIT delcount);
END IF;
RETURN NEW;
END;
$data_fun$ LANGUAGE plpgsql;
* 펑션 지우기
DROP FUNCTION data_fun();
● 트리거(Trigger) 함수 예제
지정 Table에서 추가나 변경이 이루어질 때 지정 펑션이 실행된다.
CREATE TRIGGER data_trg BEFORE INSERT OR UPDATE ON datalog
FOR EACH ROW EXECUTE PROCEDURE data_fun();
* 트리거 지우기
DROP TRIGGER data_trg ON datalog;
● 테스트용 데이터
insert into datalog(logtime, data) values('2015-01-01 12:12:01', 'aa');
insert into datalog(logtime, data) values('2015-01-01 12:12:02', 'aa');
insert into datalog(logtime, data) values('2015-01-01 12:12:03', 'aa');
insert into datalog(logtime, data) values('2015-01-01 12:12:04', 'aa');
insert into datalog(logtime, data) values('2015-01-01 12:12:05', 'aa');
insert into datalog(logtime, data) values('2015-01-01 12:12:06', 'aa');
insert into datalog(logtime, data) values('2015-01-01 12:12:07', 'aa');
insert into datalog(logtime, data) values('2015-01-01 12:12:08', 'aa');
insert into datalog(logtime, data) values('2015-01-01 12:12:09', 'aa');
insert into datalog(logtime, data) values('2015-01-01 12:13:01', 'aa');
insert into datalog(logtime, data) values('2015-01-01 12:13:02', 'aa');
insert into datalog(logtime, data) values('2015-01-01 12:13:03', 'aa');
insert into datalog(logtime, data) values('2015-01-01 12:13:04', 'aa');
insert into datalog(logtime, data) values('2015-01-01 12:13:05', 'aa');
insert into datalog(logtime, data) values('2015-01-01 12:13:06', 'aa');
insert into datalog(logtime, data) values('2015-01-01 12:13:07', 'aa');
insert into datalog(logtime, data) values('2015-01-01 12:13:08', 'aa');
insert into datalog(logtime, data) values('2015-01-01 12:13:09', 'aa');