簡単な質問ですが、PostgreSQLで二重引用符を省略する方法はありますか?
例として、select * from A;
、取得しますERROR: relation "a" does not exist
、そして私はselect * from "A";
実際の結果を取得します。
PostgreSQLで2番目を行わずに代わりに最初を行う方法はありますか?
このクエリに関する問題は、テーブルを作成したときに始まりました。テーブルを作成するときは、引用符を使用しないでください。
これを使って:
CREATE TABLE a ( ... );
これではない:
CREATE TABLE "A" ( ... );
後者はそれを作るので、常に後で引用する必要があります。前者はそれを通常の名前にし、SELECT * FROM a;
またはSELECT * FROM A;
テーブルを再作成できない場合は、ALTER TABLE
構文:
ALTER TABLE "A" RENAME TO a;
postgresのテーブル名に大文字を含める場合は二重引用符が必要です
要件を回避するには、テーブルに「a」という名前を付けます
Postgresqlには、引用符と大文字小文字の区別に関して 特定の動作 があります。引用符で囲まれていないすべての識別子を小文字に(作成時にも)折りたたみ、大文字と小文字を区別して機能します。
識別子の二重引用符は、識別子(テーブル名、列名など)が(スキーマの作成時に)大文字(一部またはすべて)で、二重引用符の間に定義されている場合にのみ必要です。
その場合(お勧めします)、その識別子を使用するときは、大文字と小文字を区別して(定義どおりに大文字と小文字を正確に入力)、二重引用符で囲んで、同じように入力する必要があります。
他の場合では、引用符で囲まれていない識別子を使用して、常に大文字と小文字を区別せずに処理できます。
テーブル名または列名に大文字を使用しないでください。そのようなものを使用している場合、postgresはアクセスするために二重引用符を必要とします。
何が起こっているかの詳細な説明をご覧ください ここ 。
PostgreSQLサーバーのテーブル名では大文字と小文字が区別されますが、デフォルトでは小文字が強制されます。CREATE TABLE AAA
と入力すると、クエリが実行される前にCREATE TABLE aaa
になります。
二重引用符で囲まれた名前は、大文字と小文字が区別されないため、CREATE TABLE "AaA"
の後にテーブルAaA
を取得し、二重引用符で何度も書き込む必要があります。
彼らがなぜそうしたのか分かりません:)