Чтобы добавить к другому ответу, поведение 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