Erreur insaisissable « La colonne n'existe pas » de PostgreSQL : une étude de cas
Les développeurs Java rencontrent fréquemment l'erreur déroutante « la colonne n'existe pas » dans PostgreSQL, même avec la colonne clairement définie dans la base de données. Cela se produit souvent lors de la construction de requêtes dynamiques qui récupèrent les noms de colonnes directement à partir de la base de données.
Examinons une situation typique : un utilisateur tente de récupérer des valeurs non nulles et non vides de la colonne "Continent" de la table "pays" résidant dans le schéma "réseau". La requête initiale est :
<code class="language-sql">SELECT Continent FROM network.countries WHERE Continent IS NOT NULL AND Continent <> '' LIMIT 5</code>
L'exécution de cette requête génère l'erreur frustrante :
<code>org.postgresql.util.PSQLException: ERROR: column "continent" does not exist</code>
La suggestion de PostgreSQL d'utiliser "countries.Continent" est trompeuse, car la présence de la colonne dans pgAdmin 4 est indéniable.
La solution : l'importance des doubles guillemets
Le problème vient du manque de guillemets doubles autour du nom de la colonne. Dans les requêtes dynamiques, l'utilisation de guillemets doubles autour des noms de colonnes est essentielle pour éviter les conflits de noms. Cela oblige PostgreSQL à traiter le nom comme une chaîne littérale, évitant ainsi d'éventuelles interprétations erronées.
La requête corrigée, intégrant des guillemets doubles, est :
<code class="language-sql">SELECT "Continent" FROM network.countries WHERE "Continent" IS NOT NULL AND "Continent" <> '' LIMIT 5</code>
Cette requête révisée s'exécute correctement et renvoie les résultats attendus : des valeurs "Continent" non nulles et non vides. N'oubliez pas de systématiquement guillemets les noms de colonnes dans le SQL dynamique pour éviter ce piège courant.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!