web-dev-qa-db-de.com

PostgreSQL "Spalte existiert nicht", aber tatsächlich

Ich schreibe eine Java-Anwendung, um automatisch SQL-Abfragen zu erstellen und auszuführen. Für viele Tabellen funktioniert mein Code gut, aber bei einer bestimmten Tabelle wird er durch die folgende Ausnahme blockiert:

Exception in thread "main" org.postgresql.util.PSQLException: ERROR: column "continent" does not exist
  Hint: Perhaps you meant to reference the column "countries.Continent".
  Position: 8

Die Abfrage, die ausgeführt wurde, lautet wie folgt:

SELECT Continent
FROM network.countries
WHERE Continent IS NOT NULL
AND Continent <> ''
LIMIT 5

Dies gibt im Wesentlichen 5 nicht leere Werte aus der Spalte zurück.

Ich verstehe nicht, warum ich den Fehler "Spalte existiert nicht" erhalte, wenn dies eindeutig in pgAdmin 4 geschieht. Ich kann sehen, dass es ein Schema mit dem Namen Network gibt, das die Tabelle countries enthält und dass diese Tabelle eine Spalte namens Continent enthält, wie erwartet.

Da alle Spalten-, Schema- und Tabellennamen von der Anwendung selbst abgerufen werden, glaube ich nicht, dass ein Rechtschreib- oder Semantikfehler aufgetreten ist. Warum verursacht PostgreSQL trotzdem Probleme? Die Abfrage in pgAdmin4 auszuführen oder den vorgeschlagenen countries.Continent zu verwenden, funktioniert.

Meine PostgreSQL-Version ist ab sofort die neueste:

$ psql --version
psql (PostgreSQL) 9.6.1

Wie kann ich die Abfrage erfolgreich ausführen?

8
BullyWiiPlaza

Versuchen Sie, es in doppelte Anführungszeichen zu setzen - wie "Continent" in der Abfrage:

SELECT "Continent"
FROM network.countries
...
14
Eugene Lisitsky

Dieses Problem tritt auf, weil in pgAdmin3 der Tabellenname nicht Tabellenname ist, sondern "Tabellenname" . ZB . Wenn Benutzer als Tabellenname angezeigt wird, ist Als Tabellenname "Benutzer".

Sieh dir das an:

image for table user

0
Kaori

Bei der Arbeit mit der SQLAlchemy-Umgebung habe ich diesen Fehler mit der SQL wie folgt:

   db.session.execute(
    text('SELECT name,type,ST_Area(geom) FROM buildings WHERE type == "plaza" '))

FEHLER: Spalte "Plaza" existiert nicht

Nun, ich habe == by = geändert, Fehler bleibt bestehen, dann habe ich die Anführungszeichen wie folgt ausgetauscht. Es funktionierte. Seltsam!

.... 
text("SELECT name,type,ST_Area(geom) FROM buildings WHERE type = 'plaza' "))
0
ISONecroMAn