2013-02-06 4 views
106

Czy istnieje kwerendy dostępne do listy wszystkich tabel w mojej Postgres DB.Postgres kwerendy do listy wszystkich nazw tabel

Starałem się jak jedno zapytanie:

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

Ale ta kwerenda zwraca również widoki.

Jak mogę uzyskać tylko nazwy tabel, a nie widoki?

Odpowiedz

183

Co za te zapytanie (na podstawie opisu z manual)?

SELECT table_name 
    FROM information_schema.tables 
WHERE table_schema='public' 
    AND table_type='BASE TABLE'; 
+2

to jest najlepsza odpowiedź tutaj. – Tommy

25

Otwórz terminal postgres'owy z databse chcesz:

psql dbname (run this line in a terminal) 

następnie uruchom to polecenie w środowisku postgres

\d 

Będzie to opisać wszystkie tabele według nazwy. Zasadniczo lista tabel według nazwy rosnąco.

Następnie można spróbować to opisać stół polami:

\d tablename. 

nadzieję, że to pomaga.

+0

@wingedpanther jak? istnieje opcja '\ d' do listy * tylko * wszystkich tabel bez indeksu, bez seq, ...? –

+3

Czy '' '\ dt''' nie istnieje? – thoroc

4
select 
relname as table 
from 
pg_stat_user_tables 
where schemaname = 'public' 

select 
    tablename as table 
from 
    pg_tables 
where schemaname = 'public' 
+1

'pg_stat_user_tables' może nie zostać wypełnione, jeśli' track_activities' jest wyłączone. Używanie "oficjalnego" API, takiego jak 'pg_tables' lub' information_schema.table' jest ** dużo lepszym wyborem. –

+0

@a_horse_with_no_name patrz kolega aktualizacji :) –

25

Jeśli chcesz li st bazy

SELECT datname FROM pg_database WHERE datistemplate = false; 

Jeśli chcesz listę tabel z bieżącej instalacji pg wszystkich baz

SELECT table_schema,table_name FROM information_schema.tables 
ORDER BY table_schema,table_name; 
+0

Przynajmniej w Postgres 9.5, to nie prawda. Mam 3 bazy danych w jednym klastrze, a to jest tylko zwracanie tabel z bieżącej bazy danych. – sudo

+0

Dokumentacja mówi tylko o aktualnym: https://www.postgresql.org/docs/9.5/static/infoschema-tables.html "table_catalog \t sql_identifier \t Nazwa bazy danych, która zawiera tabelę (zawsze aktualna baza danych)" – sudo