web-dev-qa-db-fra.com

PostgreSQL "La colonne n'existe pas" mais en réalité

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?

8
BullyWiiPlaza

Essayez de le mettre entre guillemets - comme "Continent" dans la requête:

SELECT "Continent"
FROM network.countries
...
14
Eugene Lisitsky

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:

image for table user

0
Kaori

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' "))
0
ISONecroMAn