Maison > base de données > tutoriel mysql > Pourquoi PostgreSQL génère-t-il une erreur « La colonne n'existe pas » même lorsque la colonne existe ?

Pourquoi PostgreSQL génère-t-il une erreur « La colonne n'existe pas » même lorsque la colonne existe ?

Mary-Kate Olsen
Libérer: 2025-01-20 20:38:10
original
777 Les gens l'ont consulté

Why Does PostgreSQL Throw a

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>
Copier après la connexion

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>
Copier après la connexion

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>
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal