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 6252 게시물 읽기
No. 6252
UPDATE할때
작성자
가우
작성일
2005-08-08 10:15
조회수
2,546

tims=# create table test( a int not null primary key );
NOTICE: CREATE TABLE / PRIMARY KEY will create implicit index 'test_pkey' for table 'test'
CREATE
tims=#
tims=# insert into test values(1);
INSERT 2037922421 1
tims=# insert into test values(2);
INSERT 2037922422 1
tims=# update test set a=(a+1);
ERROR: Cannot insert a duplicate key into unique index test_pkey
tims=#
========================================================================

전체를 update할려해도 unique검사를 매건마다 하는지 저렇게 중복에러가 나오는데요

이건 고의적인건가요? 아님 버그인가요?

아님 postgres의 설계사상인가요?

처리는 함수만들어 하는 수 밖엔 없나요?

 

제발 버그였으면 좋겟는데,........

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

저 쿼리가 작동 된다면 그게 오히려 버그 아닌가요?

당연히 작동 되지 않아야 하는 쿼리 아닌가 생각됩니다.

저런 쿼리가 작동되는 DBMS도 있나요?

 

---------

 

홋... ORACLE은 되는군요... -.-;;

ISOLATION LEVEL 때문인가요?

좌우간 되는군요.. 음냐...

 

----------

 

ISOLATIN LEVEL과는 상관 없겠군요. 저는 여태 DB 쓰면서 당연히 이런 것이 안될 것이라고 생각했는데... 되는군요.

 

-------------

ㅎㅎㅎ sybase도 되는 군요. 그렇다면 MS SQL도 당연히 되겠네요.

 

박성철(gyumee)님이 2005-08-08 10:51에 작성한 댓글입니다.
이 댓글은 2005-08-08 11:51에 마지막으로 수정되었습니다.

MSSQL 도

+ , - 왔다갔다 잘되는군요

장현성(siche)님이 2005-08-08 13:10에 작성한 댓글입니다.
이 댓글은 2005-08-08 13:10에 마지막으로 수정되었습니다.

 

확실한 버그네요.

 

mydb=> create table test( a int not null primary key );
알림:  CREATE TABLE / PRIMARY KEY 명령으로 "test_pkey" 인덱스를 "test" 테이블에 자동으로 만들었음
CREATE TABLE
mydb=> commit;
COMMIT
mydb=> insert into test values(1);
INSERT 356588 1
mydb=> insert into test values(2);
INSERT 356589 1
mydb=> update test set a=(a+1);
오류:  중복된 키값이 "test_pkey" 유니크 제약조건을 위반했습니다
mydb=> rollback;
ROLLBACK
mydb=> insert into test values(2);
INSERT 356590 1
mydb=> insert into test values(1);
INSERT 356591 1
mydb=> update test set a=(a+1);
UPDATE 2

 

정책상의 문제도 아닌 것 같고, 능력이 안되서 미쳐 이문제를 못 풀었거나, 아니면, 놓쳤던가. 둘 중 하나인 것 같습니다. 일단 보고를 해야겠네요. 

김상기(ioseph)님이 2005-08-08 15:10에 작성한 댓글입니다.

관련된 논의가 예전에 있었군요.

 

http://groups.google.co.kr/group/mailing.database.pgsql-bugs/browse_thread/thread/1aff178dddbf8c9c/c24d583c1a883efe?lnk=st&rnum=1&hl=ko#c24d583c1a883efe

http://groups.google.co.kr/group/comp.databases.postgresql.hackers/browse_thread/thread/8b254b67487d3a71/e69e8c10524909ca?lnk=st&rnum=3&hl=ko#e69e8c10524909ca

 

결론은... 이 문제는 pgsql의 버그가 맞구요. 이미 잘 알려진 사실인 것 같습니다.

Jan은 이것을 처리하려면 시스템에 너무 무리가서 메모리 부족으로 죽을 수도 있을 것이기 때문에 하지 않는 것이 좋다는 생각이고 Vadim은 선택권은 사용자에게 있다는 말이네요.

dirty read를 구현해야 한다는데 그 이유는 모르겠습니다. 다만 pgsql의 특성상 내부적으로는 dirty read가 가능하고 다만 이것을 외부에 노출시키기만 하면 된다는 군요.

그런데... 앞으로 하자... 정도에서 끝난 것 같습니다. 이 이후에 어떻게 논의가 진행됐는지 궁금하네요.

박성철(gyumee)님이 2005-08-09 10:43에 작성한 댓글입니다.
이 댓글은 2005-08-10 08:21에 마지막으로 수정되었습니다.
[Top]
No.
제목
작성자
작성일
조회
6255칼럼의 디폴트값을 검색할 수 있는 방법이 있나요? [3]
김창욱
2005-08-10
2196
6254ERROR: duplicate key violates unique constraint "pk_test" [5]
김남일
2005-08-09
2896
6253pgadmin 에서 [3]
포스트
2005-08-08
2657
6252UPDATE할때 [4]
가우
2005-08-08
2546
6251to_char 이용 날짜 추출 [1]
이소현
2005-08-06
2741
6250이기종 DB Sync방식(Oracle->PostgreSQL) [2]
김성진
2005-08-05
3187
62498.0 인스톨 하는데서 질문입니다...
초보
2005-08-05
2020
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.021초, 이곳 서비스는
	PostgreSQL v16.4로 자료를 관리합니다