9
votes

PostgreSQL - Syntaxe de requête sans citations

J'ai une petite question idiote. J'ai installé un serveur DB PostgreSQL, mais lorsque je exécute une requête, il y a un problème d'identifiant de colonne sans guillemets. Je ne sais pas pourquoi les citations autour des identificateurs sont nécessaires. Ma requête: xxx pré>

ma pratique de Oracle dB est de ne pas utiliser ". Donc, dans Oracle: P>

ERROR:  column vc.car_id does not exist
LINE 1: SELECT vc.CAR_ID


6 commentaires

Postgres a une manipulation particulière de noms de table et de champs concernant la sensibilité à la casse.


@YPERCUBE: Ce n'est pas "particulier", il suit la norme SQL (et se comporte comme Oracle, DB2, Firebird, H2, Derby, ...)


@veselej sur un côté Note: Quata = montant d'une ressource (espace disque, utilisation de la CPU, etc.) accordé à un utilisateur; Citation = citation, chaîne entre guillemets (', "), vous parlez donc vraiment de citations et non de quotas ici :-)


@a_horse_with_no_name: la documentation des Postgres n'est pas d'accord avec vous: "Le pliage de noms non notés à minuscule dans PostgreSQL est incompatible avec la norme SQL"


@YPERCUBE: C'est pourquoi j'ai dit se comporte la même chose. La résolution de nom avec et sans guillemets suit toujours la norme (pas de citations: cas-inessitif, citations: sensible à la casse)


@a_horse: Oui, à ce stade, oui. Tant que l'on ne mélange pas cité et des noms non notés, le comportement est identique, juste.


3 Réponses :


0
votes

me semble que la table VC n'a pas de colonne nommée car_id . Êtes-vous sûr que c'est là? Faire \ d vel_car pour voir la structure de la table.

Les citations sont facultatives et vous pouvez généralement les sauter.


0 commentaires

12
votes

Lorsque vous créez vos tables en utilisant des guillemets doubles, les noms de colonne et de table deviennent sensibles à la casse. Donc "car_id" est un nom différent de "car_id"

Vous devez créer vos tables sans utiliser de guillemets doubles, puis les noms ne sont pas sensibles à la casse: car_id est identique au car_id (notez les devis manquants!) < / p>

Voir le manuel pour plus de détails:

http: // www. postgresql.org/docs/current/static/sql-syntax-lexical.html#sql-syntax-Identifiers

EDIT:
Oracle se comporte de la même manière. La seule différence est que les noms Oracle stocke en majuscule et Postgres les stocke en minuscule. Mais le comportement lors de l'utilisation de citations est identique.


0 commentaires

1
votes

de Postgres Documentation :

citant un identifiant le rend également sensible à la casse, alors que les noms non notés sont toujours pliés en minuscules. Par exemple, les identifiants FOO, FOO et "FOO" sont considérés comme identiques par PostgreSQL, mais "FOO" et "FOO" sont différents de ces trois et les uns des autres. (Le pliage des noms non notaus à minuscule dans PostgreSQL est incompatible avec la norme SQL, qui dit que les noms non notés doivent être pliés en majuscules. Ainsi, FOO devrait être équivalent à "FOO", pas "FOO" en fonction de la norme. Si Vous souhaitez écrire des applications portables que vous êtes conseillé de toujours citer un nom particulier ou de ne jamais le citer.)


0 commentaires