För att lägga till det andra svaret, beteendet hos Postresql om skiftlägeskänslighet för identifierare (tabellnamn och kolumnnamn) är:
- Om namnet inte citeras konverteras det till gemener . Annars lämnas den orörd.
- Efteråt en skiftlägeskänslig matchning är försökt.
Detta gäller inte bara för frågor, utan också för schemamanipulation; i synnerhet:skapande av tabeller.
Den gyllene regeln är konsekvens:
Om du vill skriva bärbara applikationer rekommenderas du att alltid citera ett visst namn eller aldrig citera det
Det postade problemet uppstod troligen eftersom tabellernas och kolumnnamnen citerades när de skapades (därav de konverterades inte till gemener). Så nu måste de citeras (och skiftlägeskänsliga) i alla frågor.
Normalt fungerar allt som förväntat.
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