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

Psycopg2 n'aime pas les noms de table qui commencent par une lettre minuscule

Pour ajouter à l'autre réponse, le comportement de Postresql concernant la sensibilité à la casse des identifiants (noms de table et noms de colonne) est :

  • Si le nom n'est pas entre guillemets, il est converti en minuscules . Sinon, il reste intact.
  • Ensuite, une correspondance sensible à la casse est tenté.

Cela s'applique non seulement aux requêtes, mais également à la manipulation de schéma; en particulier :création de table.

La règle d'or est la cohérence :

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

Le problème affiché est probablement dû au fait que les noms des tables et des colonnes étaient entre guillemets au moment de la création (par conséquent, ils n'ont pas été convertis en minuscules). Donc, maintenant, ils doivent être cités (et sensibles à la casse) dans toutes les requêtes.

Normalement, tout fonctionne comme prévu.

db=# create table Xxx (id integer); -- unquoted, will be converted to lowercase
CREATE TABLE
db=# select * from xXx;    -- this works ok
id
----
(0 rows)
db=# create table "Xxxx" (id integer);  -- will be left untouched
CREATE TABLE
db=# select * from xxxx;                -- bad
ERROR:  relation "xxxx" does not exist
LINE 1: select * from xxxx;
db=# select * from Xxxx;                -- bad
ERROR:  relation "xxxx" does not exist
LINE 1: select * from Xxxx;
^
db=# select * from "Xxxx";               -- ok
id
----
(0 rows)

db=# \dt *xx*
List of relations
Schema | Name | Type  |  Owner
--------+------+-------+----------
public | Xxxx | table | postgres
public | xxx  | table | postgres