2011-08-31 16 views
12

私のpostgresqlデータベースの公開スキーマにテーブルAbcを作成しました。ドキュメントpublicによると、デフォルトのスキーマにする必要があります。 search_pathは、期待どおり"$user",publicに設定されています。Postgresql:テーブル名/スキーマの混乱

select * from Abc 

をし、この呼び出しは、あまりにも失敗します:しかし、次は失敗し

select * from public.Abc 

の両方がrelation ... does not existことを言って、エラーを生成します。しかし、この1つは正常に動作します:

select * from public."Abc" 

私は経験豊富なT-SQLの開発者だけど、PostgreSQLのに新しいです。 documenationによると、postgresqlで "通常の" SQLを使用することが可能でなければなりません。しかし私の場合はうまくいかない。私は何を台無しにしたかもしれないかのヒント!?

答えて

9

列で大文字と小文字を区別しながらケースの文字を低下させるためのPostgreSQLのデフォルト/テーブル名:

select * from public.Abc 

が実際にある:。

あなたのテーブルがAbcのと呼ばれ、それが見つからないためだ
select * from public.abc 

引用符でこの小文字の動作を上書きすることができるので、 "Abc"はAbcとして処理されます。

+3

私がPGの世界で暮らしている経験則は、Microsoft SQL Serverのようにラクダの代わりに使用するアンダースコアです。 FastTableではなくfast_tableを実行します。私は迷惑であるために最小限の余分な引用符を見つける。下線が同じであることを他の人が見ているかもしれません。しかし、私はOracleのバックグラウンドから来て、私はそれを使用しています。 – Kuberchaun

5

大文字と小文字を区別しないでください。あなたの正気のためにベストは、大文字と小文字を混ぜて使用しないでください パブリック・スキーマは(ほとんど)デフォルト・スキーマであり、省略することができます。

+0

このアドバイスの理由は、モデルが別のインストールにエクスポートされたときに問題が発生し、大文字と小文字が区別されるためです。 – wildplasser

6

これは正常であり、テーブルやカラムなどのオブジェクト名を使用すると、二重引用符「の間に置く場合を除き、大文字と小文字を区別しません。これは、標準のSQLの動作です。

+0

完全性のためだけです。 SQL標準では、引用符のない名前は、** upper-caseの**引用された同等物と同じように動作する必要があると私は正しく思いますか?言い換えれば、「Abc≡」ABC「? –

+2

@ Grzegorz:AFAIKでは、テーブル名とカラム名は引用符で囲まれていなければ大文字に正規化されています。 PostgreSQL、OTOHは、名前を小文字に変換します。 –