Tabelle nicht zugreifbar - Meldung behauptet "relation ... nicht vorhanden"

Ich habe ein ganz merkwürdiges Problem:

  • Ich habe per pgAdmin eine Tabelle angelegt.
  • Dieser Tabelle weise ich einen User mit allen Rechten zu
  • Wenn ich mit diesem User ein “Select” auf diese Tabelle absetze, erscheint: “Relation xxx existiert nicht”. Wieso will er eine “Relation”?
  • Wenn ich hingegen diesen Befehl auf der gleichen Datenbank absetze: “SELECT table_name FROM information_schema.tables WHERE table_schema = ‘public’” so kommt brav meine gewünschte Tabelle zurück.
  • Im pgAdmin sehe ich die Tabelle auch. Was kann denn hier noch schief laufen?

Gruß, Karsten.

Relation ist das Gleiche wie Tabelle.

Vermutlich hast Du die Tabelle mit Groß/Kleinschreibung in doppelten Anführungszeichen angelegt

 create table "SomeTable" (...)

Damit ist der Name Case-Sensitiv und Du musst jetzt immer mit den Anführungszeichen arbeiten.

select * from "SomeTable"

Besser ist es aber die Tabellen ganz ohne die Anführungszeichen anzulegen und auch Groß/Kleinschreibung zu vermeiden:

 create table some_table (....);

Danke für die Antwort. In der Richtung wird es was sein. Ich lege die Tabelle via “pgAdmin” an und der produziert ein solches SQL:
CREATE TABLE IF NOT EXISTS public.“Test2”
(
“ID” integer,
PRIMARY KEY (“ID”)
);

Kann man das irgendwie nachträglich ändern? Oder besser die Tabelle anders generieren? Wahrscheinlich wäre es besser, ich würde diesen Create-Code per C# als SqlCommand absetzen, oder?

Wenn Du beim Abfragen die exakt gleiche Schreibweise, als in Anführungszeichen Test2
etwa:
Select * from “Test2”
nutzt
und das das einzige Problem ist, sollte es gehen.

Das tut’s leider nicht, kann aber auch sein, dass mein Code zum Erzeugen des SQL-Strings da noch patzt. Aber ich baue jetzt das Erzeugen der Tabellen gleich um, das Thema mit den Anführungszeichen ist ja so oder so schlecht. Da habe ich es lieber sauber. Gut zu wissen, dass Relation = Tabelle ist. Ich denke bei Relation immer an Beziehungen zwischen Tabellen, daher meine Verwirrung.

Gruß, Karsten.

Du kannst ruhig versuchen, Deine Tabelle zu finden.

Ansonsten kannst Du natürlich alles auch löschen, umbenennen, …

oder auch
CREATE TABLE IF NOT EXISTS public.Test2
(
ID integer,
PRIMARY KEY (ID)
);

abschicken, passiert ja nichts Schlimmes.
Und dann wieder abfragen.

Yupp, so mache ich das jetzt auch. Ich brauche sowieso einen Code, der die Datenbankstruktur pflegt. Ich habe die Tabelle via pgAdmin nur angelegt, weil ich was testen wollte und falle gleich auf die Nase :slight_smile:

Gruß, Karsten

Klar kann man das ändern

alter table "Test2" rename to test2;

alter table test2 
   rename column "ID" to id;

Testen ist ja gut! Wenn Du sowieso Code generierst, dann tu Dir ein paar Gefallen:

  • verwende für kleine oder große eigene Statements (zu Fuß getippt) (Insert, Select, Delete,…) psql console. Kostet nichts und kann alles (oder sogar mehr)
  • schreibe Code, der nicht “irgendwas” an die DB schickt, sondern Code, der Scripte schreibt.
  • optional mit einer Variante, die das Script an die DB schickt bzw. es ausführt oder psql übergibt
  • optional mit einer Variante, die einfach die Generierten Statements auf der Console ausspuckt (dann kann man damit machen, was man will…)

psql ist das hauseigene Standard Werkzeug, einfach aus der DOS Box oder Linux Terminal aufrufen, als passender User natürlich und die richtige DB auswählen (oder interaktiv in psql anpassen)

Danke für die Tipps, die Konsole schaue ich mir an. Die “psql.exe” bringt derzeit noch den Fehler: “Die Rolle KH existiert nicht.” KH wäre mein Windows-Login. Ich nehme an, dass muss noch richtig konfiguriert werden, aber das schaue ich mir an.

Gruß, Karsten.

Das ist der Default User (angemeldeter Benutzer), der verwendet wird. Kannst Du anpassen oder per Parameter gewünschte User und PW übergeben.

OK, kaum macht man es richtig, so klappt auch der Zugriff. Recht tückisch, der pgAdmin…

Gruß Karsten.

Dieses Thema wurde automatisch 60 Tage nach der letzten Antwort geschlossen. Es sind keine neuen Antworten mehr erlaubt.