sql >> Base de Datos >  >> RDS >> PostgreSQL

A Psycopg2 no le gustan los nombres de tablas que comienzan con una letra minúscula

Para agregar a la otra respuesta, el comportamiento de Postresql sobre la distinción entre mayúsculas y minúsculas de los identificadores (nombres de tablas y nombres de columnas) es:

  • Si no se cita el nombre, se convierte a minúsculas . De lo contrario, se deja intacto.
  • Después, una coincidencia sensible a mayúsculas y minúsculas se intenta.

Esto se aplica no solo a las consultas, sino también a la manipulación de esquemas; en particular:creación de tablas.

La regla de oro es la constancia:

Si desea escribir aplicaciones portátiles, se recomienda citar siempre un nombre en particular o nunca citarlo

El problema publicado surgió, probablemente, porque los nombres de las tablas y columnas se citaron en el momento de la creación (por lo tanto, no se convirtieron a minúsculas). Por lo tanto, ahora deben citarse (y distinguir entre mayúsculas y minúsculas) en todas las consultas.

Normalmente, todo funciona como se esperaba.

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