2013-07-13 11 views
9

Właściwie nie wiem, jak to zrobiłem: ale mam bezimienny stolik w moim DB postgres. Nie trzeba dodawać, że taki stół jest problematyczny, nie ulega wymazaniu, nie można go w żaden sposób zmienić.Problematyczna bezimienna tabela w Postgresql

Oto obraz tego, jak to wygląda na eksploratorze pgAdmin:

nameless table

Co do deklaracji, to idzie tak:

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

Więc na jedno proste pytanie: w jaki sposób czy mogę usunąć tę tabelę (ponieważ próba usunięcia powoduje użycie jej nazwy ... która nie istnieje!)?

Pozdrawiam.

Odpowiedz

6

Jeśli nie jest to o stół, którego nazwa nie jest wyświetlanych z powodu problemów/kodowania czcionek można to zrobić:

  • Ustalanie OID tabelę z katalogów systemowych.
  • Ustawić nową nazwę tabeli w katalogach systemowych na tymczasową nazwę. Użyj identyfikatora OID jako identyfikatora
  • Zmień nazwę tabeli na coś użytecznego (lub po prostu upuść).

To oczywiście zakłada, że ​​masz superużytkownika dostęp do bazy danych.

Pierwszy krok - określenie OID z katalogu:

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

Jeśli nie dostać żadnego rezultatu tabela ma nazwę - to nie tylko możliwość wyświetlenia. W takim przypadku po prostu pomiń część WHERE i spójrz oczami.

Drugi krok - zmień katalog systemowy:

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

W każdym razie - czy tu nie zatrzyma, to musi kontynuować.

trzecim etapie - Oczyszczanie

przechowuje PostgreSQL nazwa tabeli w więcej niż jednym miejscu (np pg_type). Niektóre narzędzia mogą na tym polegać. Aby to posprzątać, musisz upuścić tabelę (a co za tym idzie usunąć niepotrzebne elementy) LUB musisz ponownie zmienić nazwę tabeli, używając oficjalnych narzędzi.

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

lub

DROP TABLE foo; 

zwykłej ostrzeżeń: Jesteś mlaskanie w wewnętrznych PostgreSQL - nie robić głupie rzeczy i robią to na własne ryzyko :-)

+0

Yeah! To działa całkowicie, wielkie dzięki! – Akheloes

0

I don „t używać PostgreSQL, ale myślę, że można usunąć tabelę następujących etapach:

  1. Take zrzut sql
  2. Usuń bazę
  3. Usuń ten bezimienny tabelę z wysypiska i przywracanie SQL zrzutu
+0

"_Take dump_ bazy danych", co oznacza? – Akheloes

+0

@ Gloserio, jest do backupu http://www.postgresql.org/docs/8.1/static/backup.html – shweta

+0

@shweta Haha, czas przywitać się z kumplem PostgreSQL :) –