web-dev-qa-db-fra.com

Omettre le guillemet double pour faire une requête sur PostgreSQL

Question simple, existe-t-il un moyen d'omettre la double citation dans PostgreSQL?

Voici un exemple, donnant select * from A;, Je vais récupérer ERROR: relation "a" does not exist, et je devrais donner select * from "A"; pour obtenir le vrai résultat.

Existe-t-il un moyen de ne pas faire la seconde et de faire la première sur PostgreSQL?

41
zfm

Votre problème avec cette requête a commencé lorsque vous avez créé votre table. Lorsque vous créez votre table, n'utilisez pas de guillemets.

Utilisez ceci:

CREATE TABLE a ( ... );

Pas ça:

CREATE TABLE "A" ( ... );

Ce dernier veillera à ce que vous deviez toujours le citer plus tard. Le premier en fait un nom normal et vous pouvez utiliser SELECT * FROM a; ou SELECT * FROM A;

Si vous ne pouvez pas simplement recréer votre table, utilisez le ALTER TABLE syntaxe:

ALTER TABLE "A" RENAME TO a;
67
Steve Prentice

des guillemets doubles sont nécessaires si vous incluez des majuscules dans le nom de votre table en postgres

pour éviter les exigences, nommez votre table "a"

29
David Chan

Postgresql a un comportement particulier en ce qui concerne les citations et la sensibilité à la casse: il replie chaque identifiant non cité en minuscules (également au moment de la création), puis fonctionne de manière sensible à la casse.

Les guillemets doubles dans les identifiants ne sont nécessaires que lorsque l'identifiant (nom de table, nom de colonne, etc.) a été défini (au moment de la création du schéma) avec des lettres majuscules (certaines ou toutes) et entre guillemets doubles.

Dans ce cas (contre lequel je déconseille), lorsque vous utilisez cet identifiant, vous devez le taper de la même manière: la casse de manière sensible (tapez la lettre majuscule/minuscule exactement comme défini) et entre les guillemets doubles.

Dans d'autres cas, vous pouvez utiliser des identifiants non entre guillemets et travailler toujours en respectant la casse.

22
leonbloy

N'utilisez pas de majuscule dans le nom de votre table ou dans le nom de la colonne, si vous utilisez une telle chose, les postgres auront besoin d'un double guillemet pour y accéder.

5
Sandy

Veuillez consulter la description détaillée de ce qui se passe ici .

Les noms de table du serveur PostgreSQL sont sensibles à la casse, mais forcés à être en minuscules par défaut: lorsque vous tapez CREATE TABLE AAA, il deviendra CREATE TABLE aaa avant l'exécution de la requête.

Les noms entre guillemets gardent leur cas tel qu'il était, donc après CREATE TABLE "AaA" vous obtenez la table AaA et devez l'écrire entre guillemets encore et encore.

Je ne sais pas pourquoi ils l'ont fait :)

2
Karatheodory