질문 1.
plpgsql Function 안에서는 Transaction 이 자동으로 되는걸로 알고
있습니다.
하지만, Function 안에서 몇개의 query 를 수행하다가 원하는 과정이
아닐 경우,
ROLLBACK 을 하고 싶은데요,
Function 안에 ROLLBACK 이라고만 넣어두면, syntax error 는
안나지만, 실제로 function 을 호출했을때, ROLLBACK 해야 하는
상황에서는 error 가 납니다.
Function 안에서 ROLLBACK 하려면 어떻게 해야 하는지요?
질문 2.
A 라는 Table 하나에 Rule( trigger ) 을 만들었습니다.
A 라는 Table 의 다른 컬럼을 업데이트 하는데,
EXPLAIN ANALYZE 해보면, Rule 에 걸려 있는 컬럼에 대한 index 까지
scan 을 하면서 Query 가 느려집니다.
Rule 은 아래와 같습니다.
--------------------------------------------------------
CREATE RULE UpdateV AS ON UPDATE TO A WHERE NEW.COL1 <>
OLD.COL1
DO{ UPDATE B SET COL2 = NEW.COL1 WHERE KEY = NEW.PK );
COL1 을 UPDATE 하는게 아닌데도, A 라는 테이블에 대한 UPDQTE 가
수행되면, B 테이블의 PK로 KEY 로 INDEX SCAN 을 합니다.
무엇이 문제일까요?
PostgreSQL 을 접하면서 제대로 해보려고 하는데, 아직 모르는게
많아 질문이 서툴로도 양해바랍니다.
아무쪼록 답변 부탁드립니다.
감사합니다.
|