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 9735 게시물 읽기
No. 9735
PRIMARY KEY 장애
작성자
필이
작성일
2016-11-23 10:41ⓒ
2016-11-23 10:43ⓜ
조회수
7,729

안녕하세요

 

이제까지 눈팅만 하다 고수님들의 자문을 듣고자 발생한 문제에 대하여 글을 남겨 해결해 보고자 합니다.

 

현재 발생한 문제는 리눅스 서버 셧다운 이후 여러 테이블에 있는 PRIMARY KEY에 문제가 생겨서 중복 데이터가

 

발생하였다는 겁니다.

 

중복 데이터를 걸러 내기 위하여 노가다를 하고 있는 상태이구요 이런 현상이 발생한 테이블에서 중복 건수를 찾기 위해서는

 

해당 Key값을 Upper로 변환을 해야 찾아진다는 이슈도 있구요.

 

예로

 

-- 중복 자료 찾아지는 쿼리 (Upper가 되어야 n건이 나옴)

select * from j_choolgo where upper(barcode) = 'TEST'

 

-- 중복이 안나오는 경우

select * from j_choolgo where barcode = 'TEST'

 

어떤 문제가 있는건지 알고 싶습니다. 이번이 한두번째가 아니라서 그럽니다. ㅠㅠ

 

수고하세요.

 

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

우선 upper로 검색해야하는 이유는 insert를 하실때에

 

insert into test values (upper('test')); 이런 형식으로 넣으신걸로 보여집니다.

 

문제에 대해서는 위 내용만으로는 파악이 불가하며

 

해당 log 및 database version

 

테이블 description 등을 올려주셔야 파악이 가능할 듯합니다.

 

김주왕(kimjuking)님이 2016-11-23 13:17에 작성한 댓글입니다.
이 댓글은 2016-11-23 13:20에 마지막으로 수정되었습니다.

한두번이 아닌 문제가 생결 정도로 불안한 데이터베이스라면 쓰지 말아야죠.

사용하고 있는 서비스 환경에서는 적합하지 않은 데이터베이스인가봅니다.

다른 데이터베이스 사용을 권해드립니다.

중복된 자료가 있는 것은 중복된 자료가 입력 되었기 때문이고,

중복 자료가 입력될 수 있었던 것은 입력 당시 기본키 제약 조건이 정상적으로 작동하지 않았다는 것이고,

기본키가 있음에도 불구하고, 정상적으로 제약조건 처리를 못했다면,

입력 당시 해당 키가 그 인덱스에 없었다는 것이겠죠.

PostgreSQL은 기본적으로 문자열 대소문자 구분을 합니다.

이런 합리적인 생각과 거스러는 동작을 한다면,

쓰지 말아야할 데이터베이스입니다. 적어도 운영하고 있는 그 환경에서는 말이지요.

 

해당 호스트가 비정상적으로 종료된 뒤 디스크의 물리적 손실이 없는 상황에서

자료 정합성이 깨어진다면, fsync 환경 설정값과 synchronous_commit 환경 설정값이 모두 on 인지 확인해보세요.

이럼에도 불구하고 깨졌다면, 몹쓸 디비입니다.

 

김상기(ioseph)님이 2016-11-23 13:52에 작성한 댓글입니다.

pk설정하신 항목에 Test, TEST, test 이렇게 3개 다르게 인식되기 때문에

입력이 가능합니다.

위에분 말씀대로 대소문자 먼저 확인해 보시는게 좋을 듯합니다.

 

CREATE TABLE public.test (

col VARCHAR(4) NOT NULL,

CONSTRAINT test_pkey PRIMARY KEY(col)

) ;

 

insert into test values ('test'), ('Test'), ('TEST');

지현명(gwise)님이 2016-11-24 12:01에 작성한 댓글입니다.

댓글 감사합니다.

 

중복 데이터는 모두 대문자로 입력이 되어 있으며 그렇게 입력이 되게 하였습니다.

 

Reindex를 하게 되면 중복 오류가 발생하구요.

 

중복 데이터를 삭제 후 다시 Reindex를 하여 문제를 해결 하였습니다.

 

이러한 테이블은 쿼리 조건이 듣지 않아 엉뚱한 결과값들이 나오는 현상이 발생하였습니다.

 

수고하세요.

필이님이 2016-11-25 14:20에 작성한 댓글입니다. Edit
[Top]
No.
제목
작성자
작성일
조회
9739중복 데이터 내에서 삭제하고픈 목록만 [1]
ampwings
2016-12-05
7537
9737Archive 관련 트러블 슈팅 부탁드립니다. [2]
주지후
2016-11-25
9749
9736passwordcheck 라이브러리 활용법 [2]
축구소년
2016-11-24
7767
9735PRIMARY KEY 장애 [4]
필이
2016-11-23
7729
9733postgresql 8.3.7 서버에 접속 관련 문의 [1]
탁구공
2016-11-18
7867
9732DB 복구 관련 문의 [1]
오진홍
2016-11-15
7693
9730Active-Hot_standby 구성 시 select 쿼리 처리 [2]
김성수
2016-11-10
7793
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2023 DSN, All rights reserved.
작업시간: 0.049초, 이곳 서비스는
	PostgreSQL v16.1로 자료를 관리합니다