인덱스 생성/삭제와 관련된 몇 가지 문제가 있습니다. 그래서 원래 나는pg_class 데이터가 손상 되었습니까? 존재하지 않는 테이블의 고스트 인덱스
DROP INDEX IF EXISTS ros_tmp_schoolid_IX;
다음
CREATE INDEX ros_tmp_schoolid_IX on ros.sometable USING btree (somecolumn);
을했고 그것은 인덱스가 이미 다음
존재 내가
IF EXISTS (SELECT 1
FROM pg_class c
JOIN pg_namespace n ON n.oid = c.relnamespace
WHERE c.relname = 'ros_tmp_schoolid_IX'
AND n.nspname = 'ros')
THEN
DROP INDEX ros_tmp_schoolid_IX;
END IF;
내 방법을 전환 불평하지만, 난 여전히 해요 인덱스가 존재하지 않는 오류가 발생했습니다 ... 그래서 pg_class 테이블을 살펴 보았습니다. o 해당 색인에 대한 레코드를 찾습니다.
나는 또한 모든 시도다음과 아무도 일하지 :
- 이 테이블을 삭제;
- 재 인덱싱은// 분석 전체 데이터베이스를
- 재 인덱싱 테이블 pg_class 레일과
내가 PostgreSQL을 9.3을 사용하고 있습니다 (4.1.5)를 진공 청소기로 청소. 이것은 테스트 스위트를 실행할 때 무작위로 발생합니다 ... 많은 양의 데이터를 처리 할 때 임시 테이블을 사용하고 작업이 끝난 후 드롭합니다.
문제의 원인이 무엇인지 모르겠습니다. 내가 조사해야 할 것이 있습니까?
감사합니다.
=========
또한, 내가 pg_class 더 몇을 발견, 나는 그것을 청소하는 방법을 필요가 있다고 생각합니다.
그래서 다른 테이블에서 같은 이름의 인덱스를 만들려고했지만 성공했습니다. 하지만 .. 내가 다시 떨어 뜨리려고 할 때 ... 나는 관계가 존재하지 않는 오류가 발생했습니다. 스키마의 이름을 포함 할 : 그때는 관계가 이미 존재 말하는 ... 포스트 그레스가 결정할 수 없습니다 ...
'DROP INDEX IF에서
ros_tmp_schoolid_ix
을 찾을 수 있습니다CREATE INDEX ros_tmp_schoolid_IX ...
존재 다음, 소문자로 변환 될 것이다 "ros_tmp_schoolid_IX ";"(그리고 미래에 : 대/소문자 구분자를 피하십시오, 그들은 PITA, IMHO입니다.) – joopHello joop은 인덱스가 존재하지 않기 때문에 건너 뜁니다. 내가 여기서하려고하는 것은 1. pg_class의 유효하지 않은 레코드를 정리하는 것입니다. 2.이 색인을 다시 작성하십시오. 색인이 존재하지 않으므로 색인 다시 생성이 작동하지 않습니다. 명명 제안 주셔서 감사합니다. –
'(선택 1 FROM pg_class c 조인 pg_namespace n ON n.oid = c.relnamespace c.relname ILIKE 'ros_tmp_schoolid_IX'AND n.nspname = 'ros')'결과는 무엇입니까? – joop