PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

A Psycopg2 non piacciono i nomi delle tabelle che iniziano con una lettera minuscola

Per aggiungere all'altra risposta, il comportamento di Postresql sulla distinzione tra maiuscole e minuscole degli identificatori (nomi di tabelle e nomi di colonne) è:

  • Se il nome non è tra virgolette, viene convertito in minuscolo . Altrimenti, non viene toccato.
  • In seguito, una corrispondenza con distinzione tra maiuscole e minuscole viene tentato.

Questo vale non solo per le query, ma anche per la manipolazione dello schema; in particolare:creazione tabelle.

La regola d'oro è la coerenza:

Se vuoi scrivere applicazioni portatili ti consigliamo di citare sempre un nome particolare o di non citarlo mai

Il problema pubblicato è sorto, probabilmente, perché i nomi delle tabelle e delle colonne sono stati citati al momento della creazione (quindi non sono stati convertiti in minuscolo). Quindi, ora devono essere citati (e case-sensitive) in tutte le query.

Normalmente, tutto funziona come previsto.

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