이 름 : 바다아이
|
조회수 : 9576
짧은 주소 : https://www.bada-ie.com/su/?591591789061
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');
위의 데이터를 입력하면 로그는 10개 행만 테이블에 저장된다.
데이터를 추가하기 전에 트리거의 연결된 펑션이 실행되어
테이블의 행이 10개를 넘어가면 가장 옛날 데이터를 삭제한다.
출처 : http://wwwi.tistory.com/348
|
|
번 호
카테고리
제 목
이름
조회수
Copyright ⓒ 2001.12. bada-ie.com. All rights reserved.
이 사이트는 리눅스에서 firefox 기준으로 작성되었습니다. 기타 브라우저에서는 다르게 보일 수 있습니다.
[ Ubuntu + GoLang + PostgreSQL + Mariadb ]
서버위치 : 오라클 클라우드 춘천 실행시간 : 0.07389 초 to webmaster... gogo sea. gogo sea.