Elenca le tabelle in uno schema PostgreSQL


329

Quando faccio un \dtin psql ottengo solo un elenco di tabelle nello schema corrente ( publicper impostazione predefinita).

Come posso ottenere un elenco di tutte le tabelle in tutti gli schemi o in un particolare schema?

Risposte:


505

In tutti gli schemi:

=> \dt *.*

In uno schema particolare:

=> \dt public.*

È possibile utilizzare espressioni regolari con alcune restrizioni

\dt (public|s).(s|t)
       List of relations
 Schema | Name | Type  | Owner 
--------+------+-------+-------
 public | s    | table | cpn
 public | t    | table | cpn
 s      | t    | table | cpn

Gli utenti esperti possono utilizzare le notazioni di espressioni regolari come le classi di caratteri, ad esempio [0-9] per abbinare qualsiasi cifra. Tutti i caratteri speciali di espressione regolare funzionano come specificato nella Sezione 9.7.3, ad eccezione del .quale viene considerato come un separatore come menzionato sopra, *che viene tradotto nella notazione di espressione regolare .*, ?che viene tradotto .e $che viene letteralmente abbinato. È possibile emulare questi caratteri del pattern quando necessario scrivendo ?per ., (R+|)per R*o (R|)per R?. $non è necessario come carattere di espressione regolare poiché il modello deve corrispondere al nome intero, a differenza della normale interpretazione delle espressioni regolari (in altre parole,$viene automaticamente aggiunto al modello). Scrivi *all'inizio e / o alla fine se non desideri che il motivo sia ancorato. Si noti che tra virgolette doppie, tutti i caratteri speciali delle espressioni regolari perdono i loro significati speciali e vengono abbinati letteralmente. Inoltre, i caratteri speciali dell'espressione regolare sono letteralmente abbinati nei modelli dei nomi degli operatori (ovvero, l'argomento di \do).


6
Semplicemente \dtè equivalente a \dt public.*, ho ragione?
Frozen Flame,

Che ne dici, diciamo, di due tabelle specifiche in uno schema specifico? Come \dt public.user_info, public.user_scope?
James M. Lay

Non importa, è più semplice fare solo \dt public.a; \dt public.b;su una riga.
James M. Lay

è un po 'implicito .. Se \ dt fornisce solo tabelle "pubbliche", non ci si aspetterebbe nulla di più tramite le espressioni regolari ..
mehmet

1
@FrozenFlame Non lo è! Per impostazione predefinita, mostra tutto ciò che è nel tuo search_pathe ciò è predefinito "$user", public.*. Di conseguenza, set search_path=s; \dtelencherà tutte le tabelle nello schema s.
Lukas Juhrich,

258

È possibile selezionare le tabelle da information_schema

SELECT * FROM information_schema.tables 
WHERE table_schema = 'public'

7
molto utile se la tua interfaccia non supporta le scorciatoie. Grazie.
Matt Bannert,

1
Questo è anche bello perché potresti fare qualcosa come selezionare table_schema, table_name da information_schema.tables dove table_name come '% qualunque%'; se hai bisogno di sapere in quale schema si trova la tabella. Non sei sicuro di poterlo fare con \ dt
Josh Brown,

2
Grazie, funziona su Amazon Redshift e \ dt (risposta accettata) no.
Carlos2W,

2
Questa è la risposta generalmente più utile. information_schema è definito negli standard SQL e disponibile sulla maggior parte dei database conformi
Davos,

54

In alternativa information_schemaè possibile utilizzare pg_tables:

select * from pg_tables where schemaname='public';

3
si noti che se si desidera solo il nome della tabella è la query risultante èSELECT tablename FROM pg_tables WHERE schemaname = 'public';
concedi Humphries il

È stato riscontrato un problema con le autorizzazioni per information_schemanon elencare gli elementi dallo publicschema, ma il pg_tablesmetodo ha funzionato bene. Grazie molto!
John Crawford,

8

Per coloro che si imbatteranno in questo in futuro:

Se desideri visualizzare un elenco di relazioni per diversi schemi:

$psql mydatabase
mydatabase=# SET search_path TO public, usa;   #schema examples
SET
mydatabase=# \dt
              List of relations
 Schema |      Name       | Type  |  Owner
--------+-----------------+-------+----------
 public | counties        | table | postgres
 public | spatial_ref_sys | table | postgres
 public | states          | table | postgres
 public | us_cities       | table | postgres
 usa    | census2010      | table | postgres
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.