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>
Das Ausführen dieser Abfrage führt zu dem frustrierenden Fehler:
<code>org.postgresql.util.PSQLException: ERROR: column "continent" does not exist</code>
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>
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!