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 4182 게시물 읽기
No. 4182
transaction 의 메시지에 관해
작성자
배재한(turbobae)
작성일
2002-05-04 15:14
조회수
1,194

가령,

begin;

select * from table_name; ==> 3개의 row가 있다고 가정하면,

commit;

 

을 psql 에 던지는 경우 총 리턴되는 값은 3+2 가 됩니다.

무슨 소리냐면,

실제로 사용자가 원하는 결과는 데이터 값인 3개의 row 입니다.

하지만, postgresql 에서는 begin; 과 commit; 의 메시지를 각각 대문자로 해서 BEGIN, COMMIT 라는 메시지를 line 으로 출력합니다.

사소할지도 모르겠지만, 사용자가 원하지 않은 결과 (메시지)를 출력하는 셈 입니다.

 

그렇다면, 이러한 사실이 문제가 될 수 있는가?

제 답은 문제가 될 수 있다는 겁니다.

이러한 메시지는 확인해 본 결과 odbc 에서도 그대로 나타나고 있습니다.

상식적으로 위의 query 가 odbc 을 통해서 postgresql 에서 3개의 row 을 가져와야 하겠지만, 실제로는 하나도 가져오지 못 할 수 도 있다는 겁니다.

왜 3+2가 아니고 0 이냐고요???

 

처음으로 되돌아오는 값은 date의 row 가 아니고, BEGIN 이라는 메시지될 수 있는데. 이 경우 대부분의 윈도우 컴포넌트(DBGrid) 에서 표시를 못할 수 있습니다. 정상적인 data set 이 아니고, 단지 string 형태의 문자이기 때문입니다..

 

 

이 문제로 하루 종일 고생했습니다.

해결방법은???

begin , commit or rollback 부분을 툴에서 제공하는 명령어로 처리하는 겁니다. 그러면 적어도, 메지시는 나오지 않죠.. 윈도우 상의 어플에선 적절히 처리될 수 있으리라 봅니다.

 

DBMS 자체와 주변의 tool(interface)와의 조화가 아직 부족한 면이 있습니다.

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

odbc를 통한 ADO일 경우

conn.execute "begin"

set rs = conn.execute("select * from ....")

이렇게 되었을때,

rs.RecordCount 값은 당연히 윗경우라면, 3을 돌려주겠지요.

 

특별히 begin 이나, commit 을 하지 않아도, MS 윈도우즈 쪽에서 사용한다면, MS 윈도우즈 api 차원에서 trasaction 처리를 합니다.

 

그외 python이나, java에서도 커넥션, 레코드셋(커서) 객체를 사용한다면, begin, commit 문제는 프로그래머가 전혀 고려하지 않아도 되겠지요.

 

프로그래머입장에서 트랜잭션을 써야하는 경우는 테이블이나, 로우의 lock을 수동으로 걸야야할 경우일터인데, 그 경우는 윗 방법, 물론 다른 언어에서도 그 비슷한 방법으로 사용하겠지요. 그렇게 된다면, 위에서 언급한 그런 문제를 발생하지는 않을겝니다.

김상기(ioseph)님이 2002-05-06 09:58에 작성한 댓글입니다.
[Top]
No.
제목
작성자
작성일
조회
4187ecpg 컴파일 에러
문호성
2002-05-07
1214
4195┕>Re: ecpg 컴파일 에러
황치영
2002-05-09 21:10:24
1162
4185jdbc 컴파일 하는데 나는 에러 [2]
정경일
2002-05-07
1501
4183function문인데 좀 도와 주십시오.. [8]
이성준
2002-05-06
1356
4184┕>Re: function문인데 좀 도와 주십시오.. [1]
이성준
2002-05-06 23:19:47
1093
4186┕>Re: function문인데 좀 도와 주십시오..
김황수
2002-05-07 10:04:53
1243
4182transaction 의 메시지에 관해 [1]
배재한
2002-05-04
1194
4181error ?
정경일
2002-05-04
1123
4180[질문]postgresql은 win32 버전은 없는지..? [1]
goodlife
2002-05-03
1194
4179훔... 우째 이런 일이... 디비박살???
차재승
2002-05-02
1192
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.018초, 이곳 서비스는
	PostgreSQL v16.2로 자료를 관리합니다