PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Pourquoi PostgreSQL n'aime pas les noms de table en MAJUSCULES ?

mettez le nom de la table entre guillemets doubles si vous voulez que postgres préserve la casse des noms de relation.

Le fait de citer un identifiant le rend également sensible à la casse, alors que les noms sans guillemets sont toujours pliés en minuscules . Par exemple, les identifiantsFOO, foo et "foo" sont considérés comme identiques par PostgreSQL, mais "Foo" et "FOO" sont différents de ces trois et l'un de l'autre. (Le pliage des noms sans guillemets en minuscules dans PostgreSQL est incompatible avec la norme SQL, qui dit que les noms sans guillemets doivent être pliés en majuscules. Ainsi, foo devrait être équivalent à "FOO" et non "foo" selon la norme. Si vous voulez écrire les applications portables auxquelles vous avez conseillé de toujours citer un nom particulier ou de ne jamais le citer .)

à partir de docs (c'est moi qui souligne)

exemple avec guillemets :

t=# create table "UC_TNAME" (i int);
CREATE TABLE
t=# \dt+ UC

t=# \dt+ "UC_TNAME"
                      List of relations
 Schema |   Name   | Type  |  Owner   |  Size   | Description
--------+----------+-------+----------+---------+-------------
 public | UC_TNAME | table | postgres | 0 bytes |
(1 row)

exemple sans guillemets :

t=# create table UC_TNAME (i int);
CREATE TABLE
t=# \dt+ UC_TNAME
                      List of relations
 Schema |   Name   | Type  |  Owner   |  Size   | Description
--------+----------+-------+----------+---------+-------------
 public | uc_tname | table | postgres | 0 bytes |
(1 row)

Donc, si vous avez créé une table avec des guillemets, vous ne devez pas ignorer les guillemets en l'interrogeant. Mais si vous avez sauté les guillemets lors de la création d'un objet, le nom a été plié en minuscules et sera donc avec le nom en majuscule dans la requête - de cette façon, vous "ne le remarquerez pas".