Um die andere Antwort zu ergänzen, ist das Verhalten von Postresql in Bezug auf die Groß- und Kleinschreibung von Bezeichnern (Tabellennamen und Spaltennamen) :
- Wenn der Name nicht in Anführungszeichen steht, wird er in Kleinbuchstaben umgewandelt . Andernfalls bleibt es unberührt.
- Danach ein Match mit Berücksichtigung der Groß-/Kleinschreibung wird versucht.
Dies gilt nicht nur für Abfragen, sondern auch für Schemamanipulationen; insbesondere:Tabellenerstellung.
Die goldene Regel ist Konsistenz:
Wenn Sie portable Anwendungen schreiben möchten, sollten Sie immer einen bestimmten Namen angeben oder niemals angeben
Das gepostete Problem entstand wahrscheinlich, weil die Tabellen- und Spaltennamen zum Zeitpunkt der Erstellung in Anführungszeichen gesetzt wurden (daher wurden sie nicht in Kleinbuchstaben umgewandelt). Daher müssen sie jetzt in allen Abfragen in Anführungszeichen (und Groß-/Kleinschreibung) gesetzt werden.
Normalerweise funktioniert alles wie erwartet.
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