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 6292 게시물 읽기
No. 6292
psql 쓰는데 트랜잭션 관리가 이상한 듯 합니다
작성자
코모리
작성일
2005-08-25 22:37
조회수
2,793

우선 postgresql 의 버전이 8.0임을 밝혀 둡니다.

 

psql -U 유저명 데이타베이스명 으로 디비에 접속했습니다.

 

\set AUTOCOMMIT off 명령으로 autocommit 껐습니다.

 

create table aaa( a numeric);

 

insert into aaa values(1);

 

select * from aaa; 하면 정상적으로 나옵니다;

 

근데 여기서 rollback을 하면 create table 까지 롤백되어 버립니다

 

postgresql은 DDL 명령어도 autocomit 안되는 건가요?

 

그리고 하나더...

 

create table bbb(b numeric);

 

insert into bbb values(2);

 

select * from bbb; 여기까지는 정상적으로 1건의 데이타를 보여주더군요.

 

select * form bbb; 하면 syntax에러가 납니다 당연하죠 from 을 form으로 썻으니;

 

근데 문제는 그담에 commit을 하면 rollback이 되어버립니다;

 

역시 create table bbb(b numeric) 문장도 같이 롤백 되어버립니다;;

 

왜 select 명령이 트랜잭션에 영향을 미치나요?

 

그리고 특정 명령이 잘못 되면 그 명령에 대해서만 rollback이 일어나는 것이 아니라

 

왜 마지막에 commit한 이후의 모든 명령어가 모두 rollback 되어 버리는 겁니까?

 

psql 의 문제인지...아니면 postgresql의 한계인지...아니면 어디선가 설정을 잘못해준 것인지...

 

아시는 분 계시면 좀 도와주세요....

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

정상 동작입니다..

auto commit 상태가 아니기 때문에 하나의 트랜젝션 블럭이 commit이나 rollback되면 바로 자동으로 새로운 트랜잭션 블럭의 시작입니다.

트랜젝션 블럭 안에서 문법 에러가 됐든 어떻든 에러가 발생하면 해당 블럭은 모두 rollback입니다.

예를 들어서 DBMS책에 자주 등장하는 계좌이체의 예를 든다면..

제가 계좌에서 돈을 빼고나서 상대 계좌에 돈을 넣고 맞나 확인 해보는데 select 쿼리에서 에러가 난다면 데이터의 신뢰를 위해 이체 작업 자체를 취소해야겠죠..

psql의 문제도 postgresql의 문제도 아닙니다. 이건 다른 DBMS도 마찬가지이지 않나요 '.'?

신기배(소타)님이 2005-08-26 01:00에 작성한 댓글입니다.

postgresql은 DDL도 트렌젝션에 영향을 받습니다.

 

그리고 postgresql은 트렌젝션 안에서 오류가 발생하면 전체 트렌젝션이 취소됩니다. 이것이 psql같이 대화형 인터페이스에서는 좀 불편한 것은 사실입니다. 열심히 수정을 하고 있었는데 마지막에 오타를 쳐서 구문 에러가 나버리면 다시 입력해야 하니까요.

 

하지만 프로그램을 작성할 때에는 안전장치가 됩니다. 프로그램을 잘못 작성해서 오류가 난 트렌젝션인데도 commit해버리는 일이 없도록 해주니까요. oracle 같은 경우에는 트렌젝션 안에서 오류가 나면 그 명령만 무시되고 여전히 트렌젝션을 유효한데 예외처리를 잘 안해줄 경우 잘못될 가능성이 많다고 생각합니다.

 

psql로 여러 명령을 실행시켜야 하는 경우에는 실행시킬 sql 명령들을 파일에 등록해 놓고 그 파일을 실행시키는 것이 더 안전하더군요.

 

DB 마다 서로 다른 특성이 있습니다. 이 부분도 psql의 특성이라고 보면 될 것 같네요.

 

 

박성철(gyumee)님이 2005-08-26 09:48에 작성한 댓글입니다.
이 댓글은 2005-08-26 10:29에 마지막으로 수정되었습니다.
[Top]
No.
제목
작성자
작성일
조회
6297PostgreSQL 8.1 Enters Beta [5]
신기배
2005-08-29
3293
6294[질문]테이블 두 개를 검색할 때 [3]
박병호
2005-08-29
1848
6293자동으로 계산되는 필드가 있는지..?? [5]
몰라
2005-08-26
2017
6292psql 쓰는데 트랜잭션 관리가 이상한 듯 합니다 [2]
코모리
2005-08-25
2793
6291구문에러..
장재혁
2005-08-25
1745
6290DB접속 질문합니다. [1]
neo
2005-08-25
3024
6288어리석은 질문 같지만...ㅡㅡ;; [1]
장재혁
2005-08-25
2268
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.022초, 이곳 서비스는
	PostgreSQL v16.2로 자료를 관리합니다