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 9453 게시물 읽기
No. 9453
update오류
작성자
서리
작성일
2014-07-25 12:12
조회수
10,391

create table test ( a int primary key );

insert into test values(1);

 

insert into test values(2);

update test set a=a+1;

 

위 구문이 postgres에서 오류가 난다는건 알고 있음니다.

한데 왜 이런 정책이 필요한건지 모르겟음니다.

아님 퍼포먼스때문일까요?

저 update구문만으로 볼때는 순차적인 처리니 뭐니 하는걸 사용자가 지정한것이 없으니 전체 처리(update)가 끝난시점에 체크가 되는게 맞지 않나 싶은데요...

 

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

 재미난 글이여서 잠깐 테스트를 해 봤는데, 

2 번자료가 먼저들어가, 1 번 자료가 들어간 경우라면 update가 되네요. 

 

즉 PostgreSQL update 처리를 하는  부분의 핵심인 동시성 제어, 트랜잭션의 원자성에 대한 구현 방식의 한계로 보입니다. 

DBMS 시각에서 본다면, 하나의 집합에 대한 하나의 트랜잭션이기 때문에 당연히 오류 없이 진행되는 것이 맞을 것 같습니다. 

 

그래서 잠깐 어떻게 하면 이 문제가 풀릴까를 고민해봤는데,

PostgreSQL의 mvcc 쪽 로직이 바뀌지 않는 이상 이 부분은 풀리지 않을 것 같습니다. 

PostgreSQL은 update 가 끝나고 이제 더 이상 사용하지 않는 옛버전의 로우도 vacuum 처리 전까지는 모두 보관하는 방식이기 때문에, 다른 곳에서 쭉 작업해서 커밋되면 최종 변경 하는 방식과는 다르게 제약조건을 처리가 될 것 같네요. 

 

김상기(ioseph)님이 2014-07-25 18:22에 작성한 댓글입니다.

답변 감사드림니다.^^

질문드린 서리임니다. 올만에 들오다보니 비번을 까먹어서 닉으로 작성했네요ㅜ.ㅜ

여전히 고풍스런 풍경이 정감이 가기도 하고....

 

 

 

 

황치영(gau)님이 2014-07-31 09:45에 작성한 댓글입니다.
[Top]
No.
제목
작성자
작성일
조회
9457oracle to postgresql 전환간 DB 성능, CPU 문제입니다. [6]
한성원
2014-08-11
13088
9456postgreSQL에 원격으로 접속해서 select 하는데 응답 없음.. [1]
separk1031
2014-08-08
11093
9454sql 쿼리로 parameter 셋팅하는 방법?(max_connections, shared_buffers) [3]
이야호
2014-07-29
11182
9453update오류 [2]
서리
2014-07-25
10391
9452관리자 계정으로 로그인하는 방법을 모르겠습니다. [1]
박종학
2014-07-23
11155
9451adminpack 생성할때 오류 [1]
이정재
2014-07-22
10770
9449windows서버 설치해도 될까요? [1]
이승호
2014-07-13
10504
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2023 DSN, All rights reserved.
작업시간: 0.048초, 이곳 서비스는
	PostgreSQL v16.1로 자료를 관리합니다