설문조사
PostgreSQL/PPAS 관련 듣고 싶은 교육은


총 게시물 94건, 최근 0 건
   

[퀴즈]AUTOCOMMIT 과 PL/pgSQL

글쓴이 : PostgresDBA 날짜 : 2015-01-08 (목) 16:31 조회 : 8144
아래는 PPAS 에서 수행한 구문입니다. postgresql 에서는 구문 에러가 나겠네요.
오라클과 비교하기 위함이니, 문장만 이해하시면 됩니다.

하나의 세션에서 수행합니다.

SQL> set AUTOCOMMIT on    --- AUTOCOMMIT 활성화 상태
SQL> drop table if exists x; 
SQL> drop table if exists y;

SQL> create table x(x int primary key); -- pk 설정
SQL> create table y(y int primary key); -- pk 설정
SQL> insert into y values(100); --- y 테이블에 100 insert

SQL> create or replace procedure p_test()    -- 프로시져 생성
is
begin
insert into x values(100); -- x 테이블에 100 insert
insert into y values(100);  -- y 테이블에 100 insert
exception when others then
dbms_output.put_line(sqlerrm);
end;

SQL> select p_test; -- 프로시져 수행
duplicate key value violates unique constraint "y_pkey"  --- y 테이블 insert 과정에서 pk dup 에러 발생
 p_test 
--------
 
(1 row)

질문들어갑니다.
아래 결과값이 얼마일까요?
SQL> select count(*) from x;

-------------------------------------------------
아래 dbuser 님 정답입니다.
--------------------------------------------------
autocommit on/off 상관없이 count(*) 값은 0 입니다.
오라클이라면 count(*)=1 입니다.

오라클에서는 sql 에서 에러 발생시, 에러 발생시킨 문장만 롤백이 되지만
PostgreSQL 에서는 문장이 아닌 트랜잭션 블럭 전체가 롤백됩니다.
어느 쪽이 옳고 그른게 아니고, 단지 동작방식이 다른것뿐이니 그 차이점을 알고 사용하면 됩니다.

PPAS 를 사용한다면, 패러미터 edb_stmt_level_tx=ON 으로 세팅하면 오라클과 같은 방식으로 처리되어 count(*) 값은 1 이 됩니다.
하지만 매뉴얼에는 성능저하가 있으므로 웬만하면 사용하지 말라고 적혀 있습니다.

이렇듯 각 DBMS 의 동작방식의 차이점을 이해하는 것은 정말 중요합니다.



dbuser 2015-01-12 (월) 18:10
0 이요...
댓글주소
     
     
PostgresDBA 2015-01-12 (월) 22:35
정답입니다.
추가 설명 달아놨습니다.
댓글주소
   

postgresdba.com