Wyświetl wszystkie tabele w schemacie postgresql information_schema


200

Jaki jest najlepszy sposób na wyświetlenie wszystkich tabel w schemacie_informacyjnym PostgreSQL?

Aby wyjaśnić: pracuję z pustą bazą danych (nie dodałem żadnych własnych tabel), ale chcę zobaczyć każdą tabelę w strukturze information_schema.

Odpowiedzi:


276

Powinieneś być w stanie po prostu uruchomić, select * from information_schema.tablesaby uzyskać listę każdej tabeli zarządzanej przez Postgres dla konkretnej bazy danych.

Możesz także dodać a, where table_schema = 'information_schema'aby zobaczyć tylko tabele w schemacie informacyjnym.


4
Dzięki, właśnie próbowałem: / dt (gwiazdka). (Gwiazdka) czy to coś innego?
littleK

Przykro mi, nie wiem nic o / dt (gwiazdka). (Gwiazdka) Właśnie uruchomiłem wybrane zapytanie w postgresie i zawierało ono informacje o wszystkich tabelach w nim zawartych. Spróbuj uruchomić instrukcję select (na pustej bazie danych) i sprawdź, co zwraca.
RodeoClown

Wypróbowanie powyższej komendy powoduje wyświetlenie następujących tabel w schemacie_informacyjnym: cechy_sql, informacje_suplementu_sql, języki_sql, pakiety_sql, części_sql, rozmiary_sql, profile_sql_size ..... Więc jaka jest różnica między tymi tabelami a tymi w tabelach_symbolu_informacji?
littleK

2
Wszystkie wymienione tabele (za pomocą komendy / dt) zawierają meta-informacje o bazie danych. Każda z wymienionych tabel pokazuje inne informacje. Na przykład w tabeli information_schema.tables wymieniono wszystkie tabele w bazie danych i ich atrybuty (na przykład możliwość sprawdzenia, czy jest to tabela czy widok, jak się nazywa i inne podobne informacje). Tabela information_schema.sql_features pokaże, jakie funkcje są włączone w bazie danych (więc widzę, że mam osadzone C obsługiwane w mojej bazie danych, a także bezpośredni SQL).
RodeoClown

1
Możesz uruchomić select * na każdej tabeli wymienionej za pomocą polecenia dt - właśnie pokazała ci listę tabel zawierających metadane w bazie danych.
RodeoClown

112

Aby wyświetlić listę swoich tabel, użyj:

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

Wyświetli tylko tabele, które utworzysz.


Co powiesz na tabele, których nie tworzysz, ale masz do nich uprawnienia dostępu?
huy

4
Spowoduje to wyświetlenie tabel tylko w schemacie publicznym. Możesz tworzyć tabele w innych schematach.
Joe Van Dyk,

Nie rozróżnia to również tabel i widoków.
jayarjo

44
\dt information_schema.

z psql powinno być w porządku.


14

Polecenie „\ z” jest również dobrym sposobem na wyświetlenie listy tabel w interaktywnej sesji psql.

na przykład.

# 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
Nie wyświetla tabel w schematach innych niż publiczne .
Kenny Evitt,

10

Możesz także użyć

select * from pg_tables where schemaname = 'information_schema'

Generalnie tabele pg * pozwalają zobaczyć wszystko w db, nie ograniczone do twoich uprawnień (jeśli oczywiście masz dostęp do tabel).


9

W przypadku prywatnego schematu 'xxx'w postgresql:

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

Bez table_type = 'BASE TABLE'wyświetlisz tabele i widoki


8

1. pobierz wszystkie tabele i widoki z Information_schema.tables, włączając te z information_schema i pg_catalog.

select * from information_schema.tables

2. tabele i widoki należą do określonego schematu

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

3. tylko tabele (prawie \ dt)

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

Jeśli nie będziesz filtrować według typu table_ty, pomieszane zostaną różnego rodzaju obiekty, takie jak tabele i widoki.
russellhoff,

Po co dokładnie where table_schema not in ('information_schema', 'pg_catalog')jest?
jayarjo

1

Jeśli chcesz szybkie i brudne zapytanie z jedną linią:

select * from information_schema.tables

Możesz uruchomić go bezpośrednio w narzędziu Query, bez konieczności otwierania psql.

(Inne posty sugerują ładne, bardziej szczegółowe zapytania information_schema, ale jako nowe, znajduję to jedno-liniowe zapytanie pomaga mi poradzić sobie ze stołem)

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.