web-dev-qa-db-fra.com

Les noms de colonne PostgreSQL sont-ils sensibles à la casse?

J'ai une table de base de données dire persons dans Postgres, transmise par une autre équipe qui porte un nom de colonne, par exemple "first_Name". Maintenant, j'essaie d'utiliser PG commandant pour interroger cette table sur ce nom de colonne.

select * from persons where first_Name="xyz";

Et ça revient

ERREUR: la colonne "first_Name" n'existe pas

Vous ne savez pas si je fais quelque chose de stupide ou s'il y a une solution de rechange à ce problème qui me manque?

127
5122014009

Tous les identifiants (y compris les noms de colonnes) qui ne sont pas entre guillemets sont repliés en minuscules dans PostgreSQL. Les noms de colonne créés avec des guillemets doubles et par conséquent conservés en majuscules (et/ou autres violations de syntaxe) doivent être doublés pour le reste de leur vie. Donc, yes , les noms de colonnes PostgreSQL respectent la casse:

SELECT * FROM persons WHERE "first_Name" = 'xyz';

Corrigez également les guillemets incorrects autour de 'xyz'. Les valeurs (littéraux de chaîne) sont entre guillemets simples .

Lire le manuel ici.

Mon conseil habituel est d'utiliser exclusivement des noms légaux et minuscules afin d'éviter les doubles guillemets.

229
Erwin Brandstetter

Pour citer le documentation :

Les mots clés et les identificateurs non cités ne sont pas sensibles à la casse. Donc:

UPDATE MY_TABLE SET A = 5;

peut de manière équivalente être écrit comme:

uPDaTE my_TabLE SeT a = 5;

Vous pouvez également l'écrire en utilisant les identificateurs cités :

UPDATE "my_table" SET "a" = 5;

La citation d'un identifiant le rend sensible à la casse, alors que les noms non cités sont toujours pliés en minuscules (contrairement au standard SQL où les noms non cités sont pliés en majuscules). 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. .

Si vous voulez écrire des applications portables, il est conseillé de toujours citer un nom particulier ou de ne jamais le citer.

12
Eugene Yarmash

Les noms de colonnes mixtes, casse ou majuscule, doivent être cités deux fois dans PostgresQL. La meilleure convention sera donc de suivre tous les petits cas avec un tiret bas.

3
randomness