가령,
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)와의 조화가 아직 부족한 면이 있습니다.
|