2013-03-06 17 views
13

Tutaj "mój obecny stan.Dlaczego psql nie może znaleźć nazwy relacji dla istniejącej tabeli?

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=# 

Jaki jest problem i jak wyświetlić definicję tabeli?

Odpowiedz

20

Postgres psql potrzebuje ucieczki w poszukiwaniu wielkich liter.

Eonil=# \d+ "TestTable1" 

To działa dobrze.

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

nienotowane identyfikatory (takie jak nazwy tabel i kolumn) są składane na małe litery w PostgreSQL, trzeba pamiętać, że norma określa, że ​​powinny być one upcased tak PostgreSQL jest niestandardowa tutaj. Jeśli potrzebujesz identyfikatorów w konkretnym przypadku lub zawierają białe znaki, musisz ** podwójnie zacytować je ** wszędzie **. Zalecaną praktyką jest używanie małych liter identyfikatorów ze słowami oddzielonymi przez podkreślenia w PostgreSQL, w ten sposób nie musisz dbać o cytowanie lub sprawy. –

+0

Dzięki za wyjaśnienie. W każdym razie, jako programista aplikacji - nie profesjonalny DBA - podoba mi się to jawne zachowanie, a nawet lepiej, jeśli pluje błędem na te małe różnice. – Eonil