2013-07-13 7 views
9

실제로 어떻게했는지 모르겠지만 이름이없는 테이블이 내 postgres DB에 있습니다. 말할 필요도없이 그러한 테이블은 문제가 있으며, 지워지지 않으며, 어떤 식 으로든 변경할 수 없습니다. 여기 Postgresql에 문제가있는 이름이없는 테이블

이는 pgAdmin 탐색기에서의 모습의 사진입니다 : 선언에 관해서는

nameless table

,이 같이 간다 :

CREATE TABLE 
(
    _id_ integer NOT NULL DEFAULT nextval('bu_b__id__seq'::regclass), 
    pt_utilisateur integer, 
    pt_date date, 
    lon double precision, 
    lat double precision, 
    CONSTRAINT PRIMARY KEY (_id_) 
) 

그래서, 하나의 간단한 질문 : 어떻게 이 테이블을 삭제할 수 있습니까? 삭제하려고하면 존재하지 않는 이름이 사용됩니다.)

감사합니다.

답변

6

이 이름을 인코딩/글꼴 문제로이 작업을 수행 할 수 있습니다 인해 비 표시가있는 테이블에 대한 하지 경우 :

  • 는 시스템 카탈로그 테이블의 OID를 결정합니다.
  • 시스템 카탈로그의 새 테이블 이름을 임시 이름으로 설정하십시오. OID를 식별자로 사용하십시오.
  • 테이블의 이름을 다시 유용하게 바꾸십시오 (또는 그냥 삭제하십시오).

물론 데이터베이스에 대한 수퍼 유저 액세스 권한이 있다고 가정합니다. 그냥 디스플레이하지 않습니다 -

SELECT oid, relname FROM pg_class WHERE length(relname) <= 1; 

당신이 테이블 이름이있는 결과를 얻을 수없는 경우 : -

첫 번째 단계 카탈로그에서 OID를 결정한다. 이 경우 WHERE 부분을 건너 뛰고 눈으로 확인하십시오. -

두 번째 단계

는 시스템 카탈로그 변경 : 어떤 경우에

UPDATE pg_class SET relname = 'foo' WHERE oid = /*OID from step 1*/; 

을 - 여기에서 멈추지 말고, 당신은 진행해야합니다.

번째 단계 - 하나 개 이상의 위치 (예컨대 pg_type)에 정리

PostgreSQL을 저장 테이블 이름. 일부 도구는 이에 의존 할 수 있습니다. 이 작업을 정리하려면 테이블을 삭제해야하므로 테이블의 이름을 다시 정식 툴을 사용하여 변경해야합니다.

ALTER TABLE foo RENAME TO /*somthing real*/; 

또는

DROP TABLE foo; 

일반적인 경고

: 당신의 PostgreSQL의 내부에 우적 우적 씹어 먹고있다 -

+0

그래 삭제! 이것은 완전히 작동합니다, 많이 고마워요! – Akheloes

0

나는 돈 :-) 자신의 위험에 그것을 어리석은 일을하고하지 않는다 'T는 PostgreSQL의를 사용하지만 난 당신이 다음 단계로 해당 테이블을 삭제할 수 있습니다 같아요

  1. 는 SQL 덤프를 타고
  2. 데이터베이스
  3. 덤프에서 그 이름이없는 테이블을 제거하고 복원 SQL 덤프
+0

"_ 데이터베이스 데크 _", 의미? – Akheloes

+0

@Gloserio, 백업용입니다. http://www.postgresql.org/docs/8.1/static/backup.html – shweta

+0

@shweta 하하, PostgreSQL 버디에게 인사 할 시간 :) –