Elenca tutte le tabelle in postgresql information_schema


200

Qual è il modo migliore per elencare tutte le tabelle in Information_schema di PostgreSQL?

Per chiarire: sto lavorando con un DB vuoto (non ho aggiunto nessuna delle mie tabelle), ma voglio vedere ogni tabella nella struttura information_schema.

Risposte:


276

Dovresti essere in grado di eseguire solo select * from information_schema.tablesper ottenere un elenco di ogni tabella gestita da Postgres per un determinato database.

Puoi anche aggiungere a where table_schema = 'information_schema'per vedere solo le tabelle nello schema delle informazioni.


4
Grazie, ho appena provato: / dt (asterisco). (Asterisco) è diverso?
littleK,

Non so nulla della cosa / dt (asterisco). (Asterisco), scusa. Ho appena eseguito la query di selezione in Postgres e ha elencato le informazioni su tutte le tabelle in esso. Prova a eseguire l'istruzione select (sul tuo db vuoto) e vedi cosa restituisce.
RodeoClown

Provare il comando sopra elenca le seguenti tabelle in information_schema: sql_features, sql_implementation_info, sql_languages, sql_packages, sql_parts, sql_sizing, sql_sizing_profiles ..... Quindi qual è la differenza tra quelle tabelle e quelle in information_schema.tables?
littleK,

2
Tutte le tabelle che hai elencato (tramite il comando / dt) forniscono meta-informazioni sul database. Ciascuna delle tabelle elencate mostra informazioni diverse. Quindi, ad esempio, la tabella information_schema.tables elenca tutte le tabelle nel database e i loro attributi (come la possibilità di vedere se è una tabella o una vista, qual è il nome e altre informazioni simili). La tabella information_schema.sql_features mostrerà quali funzionalità sono abilitate sul database (quindi posso vedere che ho Embedded C supportato sul mio database, così come SQL diretto).
RodeoClown

1
È possibile eseguire una selezione * su ciascuna delle tabelle elencate dal comando dt: ha appena mostrato un elenco di tabelle contenenti metadati nel database.
RodeoClown

112

Per elencare i tuoi tavoli usa:

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

Elenca solo le tabelle che crei.


Che ne dici di tabelle che non crei ma hai i permessi di accesso?
huy,

4
Questo mostrerà solo le tabelle nello schema pubblico. È possibile creare tabelle in altri schemi.
Joe Van Dyk,

Inoltre, questo non distingue tra tabelle e viste.
jayarjo

44
\dt information_schema.

dall'interno di psql, dovrebbe andare bene.


14

Il COMANDO "\ z" è anche un buon modo per elencare le tabelle all'interno della sessione psql interattiva.

per esempio.

# psql -d mcdb -U admin -p 5555
mcdb=# /z
                           Access privileges for database "mcdb"
 Schema |              Name              |   Type   |           Access privileges
--------+--------------------------------+----------+---------------------------------------
 public | activities                     | table    |
 public | activities_id_seq              | sequence |
 public | activities_users_mapping       | table    |
[..]
 public | v_schedules_2                  | view     | {admin=arwdxt/admin,viewuser=r/admin}
 public | v_systems                      | view     |
 public | vapp_backups                   | table    |
 public | vm_client                      | table    |
 public | vm_datastore                   | table    |
 public | vmentity_hle_map               | table    |
(148 rows)

1
Questo non elenca le tabelle in schemi diversi da quelli pubblici .
Kenny Evitt,

10

Puoi anche usare

select * from pg_tables where schemaname = 'information_schema'

In generall pg * le tabelle ti permettono di vedere tutto nel db, non vincolato alle tue autorizzazioni (se hai accesso alle tabelle ovviamente).


9

Per lo schema privato 'xxx'in postgresql:

SELECT table_name FROM information_schema.tables 
 WHERE table_schema = 'xxx' AND table_type = 'BASE TABLE'

Senza table_type = 'BASE TABLE', elencherai le tabelle e le viste


8

1.get tutte le tabelle e le viste da information_schema.tables, includendo quelle di information_schema e pg_catalog.

select * from information_schema.tables

2.get tabelle e viste appartengono a determinati schemi

select * from information_schema.tables
    where table_schema not in ('information_schema', 'pg_catalog')

3.get solo tabelle (quasi \ dt)

select * from information_schema.tables
    where table_schema not in ('information_schema', 'pg_catalog') and
    table_type = 'BASE TABLE'

Se non filtri per table_type, otterrai tutti i tipi di oggetti, come tabelle e viste confuse.
Russellhoff,

A cosa where table_schema not in ('information_schema', 'pg_catalog')serve esattamente ?
jayarjo

1

Se vuoi una query one-liner veloce e sporca:

select * from information_schema.tables

Puoi eseguirlo direttamente nello strumento Query senza dover aprire psql.

(Altri post suggeriscono query information_schema più specifiche ma, come nuovo, sto trovando che questa query a una riga mi aiuta a fare i conti con la tabella)

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.