2013-03-06 13 views
13

ここに私の現在の状態。psqlが既存のテーブルのリレーション名を見つけることができないのはなぜですか?

Eonil=# \d+ 
         List of relations 
Schema | Name | Type | Owner | Size | Description 
--------+------------+-------+-------+------------+------------- 
public | TestTable1 | table | Eonil | 8192 bytes | 
(1 row) 

Eonil=# \d+ TestTable1 
Did not find any relation named "TestTable1". 
Eonil=# 

どのような問題があり、どのようにテーブル定義を確認できますか?

答えて

20

Postgres psqlは大文字でエスケープする必要があります。

Eonil=# \d+ "TestTable1" 

これはうまくいきます。 (例えばテーブルやカラム名など)

Eonil=# \d+ "TestTable1" 
        Table "public.TestTable1" 
Column |  Type  | Modifiers | Storage | Description 
--------+------------------+-----------+----------+------------- 
ID  | bigint   | not null | plain | 
name | text    |   | extended | 
price | double precision |   | plain | 
Indexes: 
    "TestTable1_pkey" PRIMARY KEY, btree ("ID") 
    "TestTable1_name_key" UNIQUE CONSTRAINT, btree (name) 
Has OIDs: no 

Eonil=# 
+5

非上場識別子は標準のPostgreSQLがここで非標準であるので、それらはupcasedされるべきであることを指定していることに注意し、PostgreSQLで小文字に折り畳まれます。特定のケースに識別子が必要な場合や、空白が含まれている場合は、**それらを四角で囲む必要があります** **どこでも**。お勧めの方法は、PostgreSQLで単語をアンダースコアで区切った小文字の識別子を使用することです。引用や大文字小文字の区別に注意する必要はありません。 –

+0

ありがとうございます。とにかく、アプリケーションプログラマとして、専門的なDBAではなく、私はこの明示的な動作が気に入っています。 – Eonil

関連する問題