他の答えに追加すると、識別子(テーブル名と列名)の大文字と小文字の区別に関する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