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.

littleK
źródło

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.

RodeoClown
źródło
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.

phsaires
źródło
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.


źródło
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)
Chris Shoesmith
źródło
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).

Timofey
źródło
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

germanlinux
źródło
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'
hzh
źródło
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)

Sally Levesque
źródło