За да добавите към другия отговор, поведението на Postresql относно чувствителността към малки и големи букви на идентификаторите (имена на таблици и имена на колони) е:
- Ако името не е в кавички, то се преобразува в малки букви . В противен случай остава недокоснат.
- След това съвпадение с чувствителност към главни букви се опитва.
Това важи не само за заявки, но и за манипулиране на схеми; по-специално:създаване на таблица.
Златното правило е последователността:
Ако искате да пишете преносими приложения, съветваме ви винаги да цитирате определено име или никога да не го цитирате
Публикуваният проблем възникна, вероятно, защото имената на таблици и колони бяха цитирани по време на създаване (следователно те не бяха преобразувани в малки букви). И така, сега те трябва да бъдат цитирани (и с отчитане на главни и малки букви) във всички заявки.
Обикновено всичко работи според очакванията.
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