web-dev-qa-db-ja.com

PostgreSQLでクエリを実行するための二重引用符の省略

簡単な質問ですが、PostgreSQLで二重引用符を省略する方法はありますか?

例として、select * from A;、取得しますERROR: relation "a" does not exist、そして私はselect * from "A";実際の結果を取得します。

PostgreSQLで2番目を行わずに代わりに最初を行う方法はありますか?

41
zfm

このクエリに関する問題は、テーブルを作成したときに始まりました。テーブルを作成するときは、引用符を使用しないでください。

これを使って:

CREATE TABLE a ( ... );

これではない:

CREATE TABLE "A" ( ... );

後者はそれを作るので、常に後で引用する必要があります。前者はそれを通常の名前にし、SELECT * FROM a;またはSELECT * FROM A;

テーブルを再作成できない場合は、ALTER TABLE構文:

ALTER TABLE "A" RENAME TO a;
67
Steve Prentice

postgresのテーブル名に大文字を含める場合は二重引用符が必要です

要件を回避するには、テーブルに「a」という名前を付けます

29
David Chan

Postgresqlには、引用符と大文字小文字の区別に関して 特定の動作 があります。引用符で囲まれていないすべての識別子を小文字に(作成時にも)折りたたみ、大文字と小文字を区別して機能します。

識別子の二重引用符は、識別子(テーブル名、列名など)が(スキーマの作成時に)大文字(一部またはすべて)で、二重引用符の間に定義されている場合にのみ必要です。

その場合(お勧めします)、その識別子を使用するときは、大文字と小文字を区別して(定義どおりに大文字と小文字を正確に入力)、二重引用符で囲んで、同じように入力する必要があります。

他の場合では、引用符で囲まれていない識別子を使用して、常に大文字と小文字を区別せずに処理できます。

22
leonbloy

テーブル名または列名に大文字を使用しないでください。そのようなものを使用している場合、postgresはアクセスするために二重引用符を必要とします。

5
Sandy

何が起こっているかの詳細な説明をご覧ください ここ

PostgreSQLサーバーのテーブル名では大文字と小文字が区別されますが、デフォルトでは小文字が強制されます。CREATE TABLE AAAと入力すると、クエリが実行される前にCREATE TABLE aaaになります。

二重引用符で囲まれた名前は、大文字と小文字が区別されないため、CREATE TABLE "AaA"の後にテーブルAaAを取得し、二重引用符で何度も書き込む必要があります。

彼らがなぜそうしたのか分かりません:)

2
Karatheodory