postgresでリレーション名の大文字と小文字を区別したい場合は、テーブル名を二重引用符で囲んでください。
識別子を引用すると大文字と小文字が区別されますが、引用符で囲まれていない名前は常に小文字に折りたたまれます 。たとえば、PostgreSQLでは識別子FOO、foo、および "foo"は同じと見なされますが、"Foo"と"FOO"はこれら3つとは異なります。 (PostgreSQLで引用符で囲まれていない名前を小文字に折りたたむことは、引用符で囲まれていない名前を大文字に折りたたむ必要があるというSQL標準と互換性がありません。したがって、fooは、標準では「foo」ではなく「FOO」と同等である必要があります。 常に特定の名前を引用するか、決して引用しないことをお勧めしたポータブルアプリケーション 。)
ドキュメントから(強調鉱山)
引用の例:
t=# create table "UC_TNAME" (i int);
CREATE TABLE
t=# \dt+ UC
t=# \dt+ "UC_TNAME"
List of relations
Schema | Name | Type | Owner | Size | Description
--------+----------+-------+----------+---------+-------------
public | UC_TNAME | table | postgres | 0 bytes |
(1 row)
引用符なしの例:
t=# create table UC_TNAME (i int);
CREATE TABLE
t=# \dt+ UC_TNAME
List of relations
Schema | Name | Type | Owner | Size | Description
--------+----------+-------+----------+---------+-------------
public | uc_tname | table | postgres | 0 bytes |
(1 row)
したがって、引用符を使用してテーブルを作成した場合は、それを照会する引用符をスキップしないでください。ただし、オブジェクトを作成する引用符をスキップした場合、名前は小文字に折りたたまれているため、クエリでは大文字の名前になります。このようにすると、「気付かない」ことになります。