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