
Zitat von
majcho
Dabei habe ich mir versehentlich eine Tabelle ohne Namen angelegt, die ich zum verrecken nicht gelöscht bekomme. Ich könnte auch die ganze Datenbank löschen, dann allerding habe ich immer noch keinen blassen Schimmer wie ich diese "Namenlose Tabelle" entweder 1. Umbenenne oder 2. Lösche.
Mal als Hinweis: die Tabelle ist nicht ohne Namen, der Name (so vermute ich mal) enthält nur 1 oder mehr Leerzeichen und sonst nichts weiter.
Okay, soweit sicherlich klar, oder?
Weiter:
PostgreSQL verwaltet alle Informationen über Tabellen intern auch in einer Tabelle, konkret in pg_tables. Diese Tabelle kann man abfragen. Man kann auch, was deutlich portabler ist, information_schema.tables abfragen.
Weiter:
Du benutzt PGAdmin. Das zu benutzen ist nicht per se falsch, aber bedenke: es ist eine GUI, die selber wahrscheinlich mehr Code enthält als PostgreSQL selbst. PostgreSQL bringt 'von Natur aus' psql mit, ist ein Kommandozeilen-Client. Alles, was ich gezeigt habe, ist damit gemacht. Es lohnt sich, sich exakt *dieses* Programm näher anzuschauen.
Weiter:
Deine 'namenlose' Tabelle enthält also sehr wahrscheinlich 1 oder mehrere Leerzeichen und Du kannst Dir mittels der genannten information_schema.tables anschauen und das alles geht ganz prima in psql.
Und nun alles zusammen:
Wir starten psql, meine Datenbank nennt sich test, ich frage ab, ob es Tabellen gibt, deren Name aus einem Leerzeichen besteht:
(zur Übung überlasse ich Dir zu erkennen, was ich tippe und was die DB mir sagt)
Code:
test=# select table_name from information_schema.tables where table_type = 'BASE TABLE' and table_schema = 'public' and table_name = ' ';
table_name
------------
(0 Zeilen)
nun erstelle ich eine solche Tabelle:
Code:
test=*# create table " " (id serial);
NOTICE: CREATE TABLE will create implicit sequence " _id_seq" for serial column " .id"
CREATE TABLE
Zeit: 33,476 ms
Nun schaue ich mir diese an:
Code:
test=*# select table_name from information_schema.tables where table_type = 'BASE TABLE' and table_schema = 'public' and table_name = ' ';
table_name
------------
(1 Zeile)
und lösche diese:
Code:
test=*# drop table " ";
DROP TABLE
Kontrolle:
Code:
test=*# select table_name from information_schema.tables where table_type = 'BASE TABLE' and table_schema = 'public' and table_name = ' ';
table_name
------------
(0 Zeilen)
Du schaffst das auch!
Andreas
Lesezeichen