Heim > Datenbank > MySQL-Tutorial > Warum gibt PostgreSQL den Fehler „Spalte existiert nicht' aus, selbst wenn die Spalte vorhanden ist?

Warum gibt PostgreSQL den Fehler „Spalte existiert nicht' aus, selbst wenn die Spalte vorhanden ist?

Mary-Kate Olsen
Freigeben: 2025-01-20 20:38:10
Original
728 Leute haben es durchsucht

Why Does PostgreSQL Throw a

Der schwer fassbare PostgreSQL-Fehler „Spalte existiert nicht“: Eine Fallstudie

Java-Entwickler stoßen in PostgreSQL häufig auf den verwirrenden Fehler „Spalte existiert nicht“, selbst wenn die Spalte in der Datenbank klar definiert ist. Dies tritt häufig auf, wenn dynamische Abfragen erstellt werden, die Spaltennamen direkt aus der Datenbank abrufen.

Untersuchen wir eine typische Situation: Ein Benutzer versucht, Nicht-Null- und nicht leere Werte aus der Spalte „Kontinent“ innerhalb der Tabelle „Länder“ im Schema „Netzwerk“ abzurufen. Die erste Abfrage lautet:

<code class="language-sql">SELECT Continent
FROM network.countries
WHERE Continent IS NOT NULL
AND Continent <> ''
LIMIT 5</code>
Nach dem Login kopieren

Das Ausführen dieser Abfrage führt zu dem frustrierenden Fehler:

<code>org.postgresql.util.PSQLException: ERROR: column "continent" does not exist</code>
Nach dem Login kopieren

Der Vorschlag von PostgreSQL, „countries.Continent“ zu verwenden, ist irreführend, da das Vorhandensein der Spalte in pgAdmin 4 unbestreitbar ist.

Die Lösung: Die Bedeutung doppelter Anführungszeichen

Das Problem liegt daran, dass der Spaltenname keine doppelten Anführungszeichen enthält. Bei dynamischen Abfragen ist die Verwendung doppelter Anführungszeichen um Spaltennamen unerlässlich, um Namenskonflikte zu vermeiden. Dadurch wird PostgreSQL gezwungen, den Namen als Literalzeichenfolge zu behandeln, um mögliche Fehlinterpretationen zu vermeiden.

Die korrigierte Abfrage mit doppelten Anführungszeichen lautet:

<code class="language-sql">SELECT "Continent"
FROM network.countries
WHERE "Continent" IS NOT NULL
AND "Continent" <> ''
LIMIT 5</code>
Nach dem Login kopieren

Diese überarbeitete Abfrage wird korrekt ausgeführt und gibt die erwarteten Ergebnisse zurück – ungleich Null und nicht leere „Kontinent“-Werte. Denken Sie daran, Spaltennamen in dynamischem SQL stets in doppelte Anführungszeichen zu setzen, um diese häufige Gefahr zu vermeiden.

Das obige ist der detaillierte Inhalt vonWarum gibt PostgreSQL den Fehler „Spalte existiert nicht' aus, selbst wenn die Spalte vorhanden ist?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage