2013-07-13 5 views
9

実際にどのように行ったのか分かりませんが、ポストグルDBに名前のないテーブルがあります。言うまでもなく、このような表は問題があり、消去されず、決して変更することはできません。ここでPostgresqlの問題のある名前のないテーブル

が、それはpgAdminでエクスプローラ上でどのように見えるかの写真です:だから、

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_) 
) 

1つの簡単な質問:どのようにその宣言については

nameless table

、それはこのように書きますこのテーブルを削除することはできますか(それを削除しようとすると、その名前を使用することになります...存在しません!)?

よろしくお願いいたします。

答えて

6

これは名前が原因あなたがこれを行うことができますエンコーディング/フォントの問題に表示可能でないテーブルについてませの場合:システムカタログからテーブルのOIDを決定

  • システムカタログの新しいテーブル名を一時的な名前に設定します。 OIDを識別子として使用する
  • テーブルの名前を変更して有用なものに変更するか、削除してください。

これはもちろん、データベースへのスーパーユーザーのアクセス権があることを前提としています。

第一歩 - カタログからOIDを決定:

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

あなたがどんな結果を取得しない場合、テーブル名前を持っている - それだけで表示可能ではありません。この場合は、WHEREの部分をスキップして、目で見てください。

第二段階 - システムカタログ変更:いずれの場合で

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

を - ここで停止していない、あなた進まなければなりません。

第三段階 - クリーンアップ

PostgreSQLは複数の場所(例えばpg_type)のテーブル名を格納します。これに依存するツールもあります。これをクリーンアップするには、テーブル(したがって未登録のもの)を削除するか、公式のツールを使用して再度テーブルの名前を変更する必要があります。

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

または

DROP TABLE foo; 

通常の警告:あなたは、PostgreSQLの内部にむしゃむしゃされている - 愚かなことを行うと

+0

うんを削除します!これは完全に動作します、ありがとう! – Akheloes

0

Iドン:-)自分の責任でそれをしませんSQLダンプを取る

  1. :「Tは、PostgreSQLを使用しますが、私はあなたが手順に従うことによって、そのテーブルを削除することができますね
  2. は、データベース
  3. ダンプからその名前のないテーブルを削除し、復元したSQLダンプ
+0

"_データベースのダンプを取る_"は意味しますか? – Akheloes

+0

@Gloserio、それはバックアップ用です。http://www.postgresql.org/docs/8.1/static/backup.html – shweta

+0

@shwetaハハ、PostgreSQLのバディにこんにちは:) –