database.sarang.net
UserID
Passwd
Database
DBMS
MySQL
ㆍPostgreSQL
Firebird
Oracle
Informix
Sybase
MS-SQL
DB2
Cache
CUBRID
LDAP
ALTIBASE
Tibero
DB 문서들
스터디
Community
공지사항
자유게시판
구인|구직
DSN 갤러리
도움주신분들
Admin
운영게시판
최근게시물
PostgreSQL Q&A 6805 게시물 읽기
No. 6805
Function 안에서 ROLLBACK?
작성자
?
작성일
2006-08-09 06:22ⓒ
2006-08-09 06:29ⓜ
조회수
3,700

질문 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 을 접하면서 제대로 해보려고 하는데, 아직 모르는게 많아 질문이 서툴로도 양해바랍니다.

 

아무쪼록 답변 부탁드립니다.

 

감사합니다.

 

 

 

 

 

 

 

이 글에 대한 댓글이 총 1건 있습니다.

-- Function 안에서 ROLLBACK 하려면 어떻게 해야 하는지요?

함수가 트랜잭션의 일부이기 때문에 Function 안에서 ROLLBACK 은 현재 지원되지 않습니다. 따라서 함수안에서 특정 쿼리 블럭을 트랜잭션하기 위해서는 C/C++ 함수(SPI 함수) 를 사용해서 별도의 세션을 열어야 합니다. 근데 C/C++ 함수 용법이 MYSQL,MSSQL 보다 좀 복잡해서 접근하기가 쉽지 않습니다.

초보대왕님이 2006-08-09 22:28에 작성한 댓글입니다.
이 댓글은 2006-08-09 22:32에 마지막으로 수정되었습니다. Edit
[Top]
No.
제목
작성자
작성일
조회
6808설치시 이런 유저 암호 문제!?!?
이영근
2006-08-17
3429
68072개이상의 디비내용을 특정 디비로 접속하여 데이터를 읽을수는 없을까요 [3]
강승준
2006-08-17
3469
6806default 제약 확인하는 법 [1]
dba
2006-08-15
3159
6805Function 안에서 ROLLBACK? [1]
?
2006-08-09
3700
6804SELECT 의 최적화와 Disk Block 에 대하여
초보
2006-08-09
3268
6803prepared statement 사용시 플랜 공유 범위.. [4]
백수환
2006-08-08
3649
6802로그파일 해석좀부탁드립니다.
왕초보
2006-08-08
4034
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.017초, 이곳 서비스는
	PostgreSQL v16.2로 자료를 관리합니다