Tabelle Löschen

Als sql-Anfänger habe ich unter pgAdmin III eine Tabelle ohne Namen angelegt. Leider lässt sich die Tabelle jetzt weder umbennenen noch löschen, weder mit Script noch manuell. Hat jemand eine Lösung?
pgAdminIII-Tabelle löschen.jpg



test=# create schema space;
CREATE SCHEMA
Zeit: 89,484 ms
test=*# set search_path=space;
SET
Zeit: 11,196 ms
test=*# create table " " (id serial);
NOTICE:  CREATE TABLE will create implicit sequence " _id_seq" for serial column " .id"
CREATE TABLE
Zeit: 272,931 ms
test=*# insert into " " values(default);
INSERT 0 1
Zeit: 0,434 ms
test=*# select * from " ";
 id
----
  1
(1 Zeile)

Zeit: 0,767 ms
test=*# drop table " ";
DROP TABLE
Zeit: 33,649 ms
test=*# drop schema space;
DROP SCHEMA
Zeit: 5,815 ms
test=*# commit;
COMMIT
Zeit: 1,031 ms
test=#

noch fragen?


Andreas

Danke für den Code, leider verursacht dieser gleich in der ersten Zeile die Fehlermeldung:

FEHLER:  Syntaxfehler bei »test«
LINE 1: test=# create schema space;
        ^

********** Fehler **********

FEHLER: Syntaxfehler bei »test«
SQL Status:42601

Welche Funktion haben die Zeit Zeilen?

You made my day :wink: test ist den Falle der Name der Datenbank und hier Teil des Prompts. Gehört nicht zum Befehl.

Welche Funktion haben die Zeit Zeilen?

rein zur Information.


Andreas

Name_der_Datenbank=# create schema space;
CREATE SCHEMA
Name_der_Datenbank=*# set search_path=space;
SET
Name_der_Datenbank=*# create table " " (id serial);
NOTICE:  CREATE TABLE will create implicit sequence " _id_seq" for serial column " .id"
CREATE TABLE
Name_der_Datenbank=*# insert into " " values(default);
INSERT 0 1
Name_der_Datenbank=*# select * from " ";
 id
----
  1
(1 Zeile)

Name_der_Datenbank=*# drop table " ";
DROP TABLE
Name_der_Datenbank=*# drop schema space;
DROP SCHEMA
Name_der_Datenbank=*# commit;
COMMIT
Name_der_Datenbank=#

Habe “test” mit dem Namen meiner Datenbank ersetzt, der Code lieferte immer noch einen Fehler:

FEHLER:  Syntaxfehler bei »Name_der_Datenbank«
LINE 1: Name_der_Datenbank=# create schema space;
        ^


********** Fehler **********

FEHLER: Syntaxfehler bei »Name_der_Datenbank«
SQL Status:42601
Zeichen:1

Beim Versuch die Tabelle manuell zu löschen, kommt der anhängende Fehlercode. Sogar jede Spalte einzeln zu löschen ist nicht möglich.

vielleicht solltest Du doch noch ein paar Jahre erst mal mit Förmchen spielen. g

Sorry, aber offensichtlich bewegen wir uns auf derart unterschiedlichen Ebenen, daß ich da momentan keine weitere Lust habe.

Andreas

Anscheinend, dann gehe ich weiter Förmchen spielen. Dennoch, danke für die Hilfe.

Mann!

Ist es denn so schwer, mal nachzudenken?

Interaktive Programme nennt man deswegen ‘interaktiv’, weil man etwas dem Programm sagt und das Programm was antwortet. Das ist dann ein Dialog. Und einen solchen Dialog habe ich via Copy&Paste Dir gezeigt. Wenn Du nicht in der Lage bist, in einem solchen Dialog die Rollen zu erkennen, dann ist es echt sehr, sehr, seeeeeehr schwer, Dir etwas zu erklären. Und ja: Dir etwas zu zeigen, was Du völlig gedankelos in einer definitiv anderen Umwelt (da ist schon der Name der DB und der Tabelle und der Spalten anders) 1:1 dann nachmachst, ist auch für Dich nicht wirklich optimal. Der nächste versteckt dann mal irgendwie ein ‘format c:’ in seinem Beispiel, und Du machst das dann. Peng!

Nein, sorry, aber so funktionieret das hier nicht!

Du bekommst hier Hilfe, Hilfe zur Selbsthilfe, so wie schon hunderte vor Dir. Das ist viel, sehr viel. Aber mehr bekommst Du nicht.

Willst Du mehr, dann hoste z.B. Deine Datenbank auf einem managed Server bei uns. Dann habe ich Zeit, in meiner Arbeitszeit, Dir mehr zu helfen. Für Geld.

Hier, wie gesagt, bekommst Du Hilfe zur Selbsthilfe. Punkt.


Andreas

Habe gerade deinen Text in die Datenbank eingegeben

[size=75]Mann!

Ist es denn so schwer, mal nachzudenken?

Interaktive Programme nennt man deswegen 'interaktiv', weil man etwas  dem Programm sagt und das Programm was antwortet. Das ist dann ein  Dialog. Und einen solchen Dialog habe ich via Copy&Paste Dir  gezeigt. Wenn Du nicht in der Lage bist, in einem solchen Dialog die  Rollen zu erkennen, dann ist es echt sehr, sehr, seeeeeehr schwer, Dir  etwas zu erklären. Und ja: Dir etwas zu zeigen, was Du völlig gedankelos  in einer definitiv anderen Umwelt (da ist schon der Name der DB und der  Tabelle und der Spalten anders) 1:1 dann nachmachst, ist auch für Dich  nicht wirklich optimal. Der nächste versteckt dann mal irgendwie ein  'format c:' in seinem Beispiel, und Du machst das dann. Peng!

Nein, sorry, aber so funktionieret das hier nicht!

Du bekommst hier Hilfe, Hilfe zur Selbsthilfe, so wie schon hunderte vor  Dir. Das ist viel, sehr viel. Aber mehr bekommst Du nicht.

Willst Du mehr, dann hoste z.B. Deine Datenbank auf einem managed Server  bei uns. Dann habe ich Zeit, in meiner Arbeitszeit, Dir mehr zu helfen.  Für Geld.

Hier, wie gesagt, bekommst Du Hilfe zur Selbsthilfe. Punkt.[/size]

Es hat geklappt! Das Ergebnis ist

Witz komm raus, du bist umzingelt

Sorry, beschäftige mich mit PostgreSQL erst seit neuestem (nur in meiner Freizeit), weil ich nach jahrelanger Nutzung von M$-Access weg will.

Na also, geht doch.

Andreas

Aus welchem Grund? Access ermöglicht als Frontend den einfachen und verständlichen Zugriff auf Datenbanken von der Desktopoberfläche. Postgres ist eine Datenbank. Die funktioniert unabhängig von Vorurteilen gegenüber MS anders als Access. Als Hilfe empfehle ich dir in jedem Fall mal in die Postgres-Doku zu schauen, oder in eins der deutschsprachigen Bücher (deren Autoren sich z.T. hier auch tummeln). Falls du dann immer noch einen Grund siehst, Postgres zu verwenden, werden dir deine dann auftauchenden Fragen hier sicher gern beantwortet. Im übrigen nutze ich selbst ganz gerne für manche Sachen Access als Frontend für Postgres :wink: .

Gruß Uwe

An PostgresSQL gefällt mir vor allem die Vielseitigkeit, Flexibilität und dennoch ist das Produkt schlank. Access gibts nur noch in den Superteuren Professional Paketen mit viele Jingle & Bells & Rippons. Das stört mich massiv.

Arbeite mir gerade durch diese beiden Bücher durch:

PostgresSQL Das Buch
Datenbankentwicklung mit PostgresSQL

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)


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:

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:

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:

test=*# drop table " ";
DROP TABLE

Kontrolle:

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

Hi Andreas,

vielen Dank!!! Dass der Code in eine Console gehört, bin ich als Greenhorn nicht gekommen. Habe alles prima nachvollziehen können. Meine Tabelle scheint jedoch ein Phantom zu sein?!? Habe dann stattdessen eine Tabelle mit zwie Leerzeichen eingegeben " " und nach deiner Vorgehensweise oben die " " (=zwei-Leerzeichen-Tabelle) beliebig anlegen und löschen können. Meine Phantomtabelle jedoch nicht.

Auf meiner Phantomtabelle liegen jedoch constraints und drei Spalten, die auch nicht änderbar/löschbar auch von den abhängigen Tabellen ist selbst ein kaskadiertes löschen nicht möglich. Jetzt kopiere ich alle brauchbaren Tabellen in eine neue Datenbank und lösche die Datenbank.

Zumindest habe ich jetzt die Zusammenhänge kapiert.

P.S.: Könnte es auch ein Fehler im Programm PostgerSQL (9.0.1) sein?

“kann nicht löschen” ist keine mir bekannte Fehlermeldung.
Du musst schon genau erklären was “nicht” funktioniert

Kriegst Du eine Fehlermeldung?
Wenn ja, bitte zeige uns das exakte Statement dass Du ausführst und die exakte Fehlermeldung.

Schon mal dran gedacht, dass es vielleicht drei oder vier Leerzeichen sein könnten?
Lass doch mal folgendes Statement laufen, dann siehst Du vielleicht besser wieviele Leerzeichen Du brauchst:

select replace(table_name, ' ', '*'), length(table_name)
from information_schema.tables
where table_schema = 'public'
and table_name like ' %'

Habe den Übeltäter gefunden!!! Es war das Problem mit den Umlauten!!!

Ich hatte die Tabelle doch mit dem Namen “Ländercode” angelegt. Nachdem ich in der console nach den vorhandenen Namen suchte, spuckte mir die Console den Namen Lndercode ohne “ä” aus. In pgAdmin III war die Tabelle Namenlos sichtbar. Ich habe dann einfach die Tabelle in

ALTER TABLE ländercode RENAME TO laendercode

umbenannt. Dann war die Tabelle sichtbar geworden. Jetzt lässt sich die Tabelle ändern/löschen.

Und wieder mal zeigt sich (leider) das grafische Tools zur Fehlersuche denkbar ungeeignet sind.

Also nochmal, falls es unbedingt pgAdmin sein soll:
In pgAdmin deine Datenbank anklicken.
Auf das SQL-Icon oben (mit der Lupe) klicken und im SQL-Editor so etwas wie:drop table " "; – ein Lehrzeichen
eingeben! Könnte natürlich auch so etwas wie:
drop table " "; – zwei Lehrzeichen
sein.
Danach das [>]-Icon klicken.
“–” Ist hier Kommentar in SQL

Hatte Deine Antwort mit dem Ländercode zu spät gelesen!

Na dann viel Spaß noch mit PostgreSQL, Hauptsache Du verliert nicht gleich den Mut …

Für ein Newbie ist ein grafisches Tool für den Einstieg einfacher als das reine Code-Getippe in die Console. Wenn allerdings das grafische Tool Umlaute verschluckt, verzweifelt der Newbie schnell.