현재 에러가 발생한 것 만은 사실입니다.
그리고 PostgreSQL의 경우 모든 자료들을 catalog 파일을 통해서 관리를 합니다.
pg_type 이라는 catalog 파일은 사용자가 정의한 table, sequence 등을 등록시켜 놓고서 관리하는 catalog 파일입니다. 아마도 이곳에 잘못이 있는 것 같습니다. 데이터 디렉토리에는 존재하는데 catalog 파일 내에는 존재하지 않는 상황이 발생한 것 같습니다.
select * from pg_type;
이렇게 명령을 줘 보면 어떤 type 들이 정의되어 있는지 알수가 있답니다.
select oid,typname from pg_type;
해보시면 앞에서 언급한 내용에 대해서 약간의 이해는 가리라 생각합니다.
그런데 이들 각각의 pg_type 의 row 들은 oid 라는 (object id) 고유의 번호를 가집니다. 이들 중 23072 라는 oid 를 가진 pg_type 상의 한 row 가 사라 졌다는 것입니다.
원인은 알수가 없습니다. 이럴 경우 심각한 문제를 야기할 수도 있습니다. 그렇지 않을수도 있지만...
해결 법은 복잡합니다.
1. vacuum 을 실행해 본다.
만약 이것으로 해결된다면 더없는 행운입니다. 하지만 대부분의 경우 그렇지 못할 경우가 많습니다.
2. 일단 original data directory 를 모두 복사해 둔다.
다음으로 디렉토리를 지우고 initdb 를 실행하고 data directory 를 다시 복구 시켜 본다.
3. catalog 파일을 하나하나 추가를 통해 해결해 본다. 이건 사실 실효성이 별로 업습니다.
성공하면 하느님께 감사드리고, 실패하면 포기하세요. 나머지 방법은 초보자를 위한 방법은 아닌 것 같습니다.
> pg_dumpall /o > db.out
> 했더니
> failed sanity check, type with oid 23072 was not found
> pg_dump failed on cosmocity, exiting
>
> oid 23072가 없다고 하는데, 제가 뭘 지워서 그런가요?
>
|