일정시간(24시간)이 지난 뒤 자동으로 해당 튜플 삭제 0 5 2,602

by ampwings [2017.01.05 11:34:34]


안녕하세요. 
일정시간(24시간)이 지난 뒤 자동으로 해당 튜플이 삭제되는 트리거를 만들려고 합니다. 
이때 필요한 함수내용 좀 봐주세요. 구글링 내공이 부족해서 실행이 안됩니다.

db :  PostgreSQL 9.5.3
tableName : bom
attribute : tem_id | item_qty | cart_date

 

CREATE OR REPLACE FUNCTION TR_Bom_TEST() RETURNS OPAQUE
  AS '
    BEGIN
      DELETE FROM bom
      WHERE cart_date < DATE_ADD(now(), INTERVAL -24 HOUR);
    END;
    ' LANGUAGE 'plpgsql';

 

---------

작년한해 많은 도움을 주셔서 감사합니다.

결과의 행복이 아닌 과정의 행복을 만끽하는 한해 되세요~~ 

by ampwings [2017.01.05 12:40:13]

자문자답입니다. 

DATE_ADD 함수가 postgresql 에는 없네요. 역시 메뉴얼을 봐야 확실한데 아직 익숙치가 않네요.. 
이렇게 하면 되는 것 같습니다. 
CREATE OR REPLACE FUNCTION TR_Bom_TEST() RETURNS OPAQUE
  AS $$
    BEGIN
      DELETE FROM bom
      WHERE cartDate < now()+INTERVAL '-24 HOUR';
    END;
    $$ LANGUAGE 'plpgsql';

즐거운 하루 보내세요! 


by ampwings [2017.01.05 12:43:02]

저는 
궁금한 부분에 대해서 구글링 해보고 모르겠으면 
이곳에 질문을 올립니다. 이때 머릿속이 정리가 되서 질문을 하는 것 조차도 도움이 많이 되네요. 
그리고 또 구글링. .. ^^ 

많은 분들이 질문을 하시지만 
'찾아보지도 않고 왜 올리지? ' 라고 생각지 마시고 너그러히 봐주세요 ... ^^ 


by ampwings [2017.01.05 13:36:36]

두가지 문제가 발생.. 

1. 해당 함수 실행하는 트리거를 생성하고 인서트문을 넣으면 
  ' 컨트롤이 return 없이 트리거 프로시저 끝에 도달함' 이라고 ERROR 나네요. 

2. 더 중요한 문제는 
  cart_date 시간을 기준으로 24시간이 지난 게시물을 자동삭제하게 하고 싶은데 어떻게 해야 할지 모른다는 점... 
 

어쩐지 순조롭다 했네요  ㅠㅠ

시간마다 실행하는 건 프로그램으로 해결하는걸로... 
어짜피 where절 구문들어가는 query는 잘 실행되니까 큰 문제 없을 듯 싶어요. 

 


by jkson [2017.01.05 14:01:13]

PostgreSQL 은 사용해보지 않아서 정확한 원인은 모르겠으나

데이터 변경이나 삭제는 function이 아닌 procedure에서 하는 게 정석이고요.

function을 사용하셨는데 return 값이 없는 것으로 보이네요.

24시간 후 자동 삭제라고 하셨는데 트리거에 해당 로직을 넣으시면 데이터 변경이 없으면

트리거 작동이 안 되고 삭제가 불가하죠. 트리거가 아닌 job으로 구현되어야 할 것 같네요.


by ampwings [2017.01.05 14:09:06]

말씀해 주신대로 procedure 에서 해볼께요. 
job 으로 구현은 해본적이 없어서 .. 이것도 이참에 한번 해보죠 뭐 ... ^^ 
답변 주셔서 감사합니다. 

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입