2013-03-06 14 views
13

Qui 'il mio stato attuale.Perché psql non riesce a trovare il nome della relazione per la tabella esistente?

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

Qual è il problema e come posso visualizzare la definizione della tabella?

risposta

20

Postgres psql richiede la fuga per lettere maiuscole.

Eonil=# \d+ "TestTable1" 

Quindi questo funziona bene.

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

identificatori quotate (come nomi di tabelle e colonne) sono piegati in minuscolo in PostgreSQL, notare che la norma specifica che essi debbano essere upcased così PostgreSQL è non standard qui. Se hai bisogno dei tuoi identificatori in un caso specifico o se contengono spazi bianchi, allora ** devi ** raddoppiarli ** ovunque **. La pratica raccomandata è quella di utilizzare identificatori di lettere minuscole con parole separate da trattini di sottolineatura in PostgreSQL, in questo modo non devi preoccuparti di citazioni o problemi di casi. –

+0

Grazie per la spiegazione. Ad ogni modo, come programmatore di applicazioni - non un DBA professionale - mi piace questo comportamento esplicito ed è ancora meglio se sputa errori su questo tipo di piccole differenze. – Eonil

Problemi correlati