Chcete-li přidat k další odpovědi, chování Postresql ohledně rozlišování malých a velkých písmen v identifikátorech (názvy tabulek a názvy sloupců) je:
- Pokud název není v uvozovkách, převede se na malá písmena . V opačném případě zůstane nedotčen.
- Poté rozlišování velkých a malých písmen je pokus.
To platí nejen pro dotazy, ale také pro manipulaci se schématy; konkrétně:vytvoření tabulky.
Zlaté pravidlo je konzistence:
Pokud chcete psát přenosné aplikace, doporučujeme vám vždy citovat konkrétní jméno nebo jej nikdy necitovat
Odeslaný problém vznikl pravděpodobně proto, že názvy tabulek a sloupců byly v době vytvoření citovány (nebyly tedy převedeny na malá písmena). Nyní tedy musí být uvozovány (a rozlišovat malá a velká písmena) ve všech dotazech.
Normálně vše funguje podle očekávání.
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