J'écris une application Java
pour générer et exécuter automatiquement des requêtes SQL. Pour beaucoup de tables, mon code fonctionne bien, mais sur une certaine table, il reste bloqué en lançant l'exception suivante:
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
La requête qui a été exécutée est la suivante:
SELECT Continent
FROM network.countries
WHERE Continent IS NOT NULL
AND Continent <> ''
LIMIT 5
Cela renvoie essentiellement les valeurs 5
non vides de la colonne.
Je ne comprends pas pourquoi je reçois l'erreur "La colonne n'existe pas" alors que c'est clairement le cas dans pgAdmin 4 . Je peux voir qu'il existe un schéma avec le nom Network
qui contient la table countries
et que cette table a une colonne appelée Continent
comme prévu.
Comme tous les noms de colonnes, de schémas et de tables sont récupérés par l'application elle-même, je ne pense pas qu'il y ait eu d'erreur orthographique ou sémantique, alors pourquoi PostgreSQL pose-t-il des problèmes malgré tout? L'exécution de la requête dans pgAdmin4 et l'utilisation du countries.Continent
suggéré fonctionnent.
Ma version de PostgreSQL est la plus récente:
$ psql --version
psql (PostgreSQL) 9.6.1
Comment puis-je exécuter avec succès la requête?
Essayez de le mettre entre guillemets - comme "Continent"
dans la requête:
SELECT "Continent"
FROM network.countries
...
Ce problème se produit car dans pgAdmin3 car le nom de la table n’est pas un nom de tableau, il s’agit plutôt de "nom_table" ..__ pour par exemple . Si l’utilisateur affiche le nom de la table, le nom.
Regarde ça:
En travaillant avec l'environnement SQLAlchemy, j'ai cette erreur avec le SQL comme ceci,
db.session.execute(
text('SELECT name,type,ST_Area(geom) FROM buildings WHERE type == "plaza" '))
ERREUR: la colonne "plaza" n'existe pas
Eh bien, j’ai changé == par =, l’erreur persiste toujours, puis j’ai échangé les guillemets, comme suit. Ça a marché. Bizarre!
....
text("SELECT name,type,ST_Area(geom) FROM buildings WHERE type = 'plaza' "))