web-dev-qa-db-ja.com

PostgreSQLの列名では大文字と小文字が区別されますか?

Postgresのpersonsというdbテーブルには、"first_Name"というカラム名を持つ別のチームが伝えています。現在、PGコマンダーを使用して、この列名でこのテーブルを照会しようとしています。

select * from persons where first_Name="xyz";

そしてそれはただ戻る

エラー:列「first_Name」は存在しません

私が愚かなことをしているのか、それとも私が見逃しているこの問題の回避策がありますか?

115
5122014009

PostgreSQLでは、二重引用符で囲まれていないすべての識別子(列名を含む)は小文字に変換されます。二重引用符で作成され、それによって大文字(および/または他の構文違反)が保持された列名は、残りの期間、二重引用符で囲む必要があります。したがって、yes、PostgreSQLの列名は大文字と小文字が区別されます:

SELECT * FROM persons WHERE "first_Name" = 'xyz';

また、'xyz'を囲む誤った二重引用符を修正します。値(文字列リテラル)は単一引用符で囲まれています。

こちらのマニュアルをご覧ください

私の常識は、合法的な小文字の名前のみを使用することで、二重引用符は不要です。

213

ドキュメント を引用するには:

キーワードと引用符で囲まれていない識別子は大文字と小文字を区別しません。したがって:

UPDATE MY_TABLE SET A = 5;

次のように書くこともできます。

uPDaTE my_TabLE SeT a = 5;

識別子を引用符で囲むと大文字と小文字が区別されますが、引用符で囲まれていない名前は常に小文字に変換されます。

UPDATE "my_table" SET "a" = 5;  // equivalent to the above examples
11
Eugene Yarmash

大文字と小文字が混在する列名は、postgres sqlで二重引用符で囲む必要があります。そのため、すべての小さなケースにアンダースコアを付けることをお勧めします。

2
randomness