Lista tabel w schemacie PostgreSQL

329

Kiedy robię \dtw psql, otrzymuję tylko listę tabel w bieżącym schemacie ( publicdomyślnie).

Jak mogę uzyskać listę wszystkich tabel we wszystkich schematach lub określonym schemacie?

Nyxynyx
źródło

Odpowiedzi:

505

We wszystkich schematach:

=> \dt *.*

W określonym schemacie:

=> \dt public.*

Możliwe jest stosowanie wyrażeń regularnych z pewnymi ograniczeniami

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

Zaawansowani użytkownicy mogą używać notacji wyrażeń regularnych, takich jak klasy znaków, na przykład [0-9], aby dopasować dowolną cyfrę. Wszystkie znaki specjalne wyrażeń regularnych działają zgodnie z opisem w Sekcji 9.7.3, z wyjątkiem tego, że .jest traktowane jako separator, jak wspomniano powyżej, *który jest tłumaczony na notację wyrażenia regularnego .*, ?która jest tłumaczona .i $która jest dosłownie dopasowana. Możesz emulować te znaki wzorca w razie potrzeby pisząc ?dla ., (R+|)dla R*lub (R|)dla R?. $nie jest potrzebny jako znak wyrażenia regularnego, ponieważ wzorzec musi pasować do całej nazwy, w przeciwieństwie do zwykłej interpretacji wyrażeń regularnych (innymi słowy,$jest automatycznie dołączany do wzoru). Napisz *na początku i / lub na końcu, jeśli nie chcesz, aby wzór został zakotwiczony. Zauważ, że w podwójnych cudzysłowach wszystkie znaki specjalne wyrażeń regularnych tracą swoje specjalne znaczenie i są dosłownie dopasowane. Ponadto znaki specjalne wyrażeń regularnych są dosłownie dopasowywane do wzorców nazw operatorów (tzn. Argumentów \do).

Clodoaldo Neto
źródło
6
Po prostu \dtjest ekwiwalentny \dt public.*, mam rację?
Frozen Flame,
Co powiesz na dwie konkretne tabele w określonym schemacie? Jak \dt public.user_info, public.user_scope?
James M. Lay
Nieważne, łatwiej jest to zrobić \dt public.a; \dt public.b;na jednej linii.
James M. Lay
jest to coś domyślnego. Jeśli \ dt podaje tylko „publiczne” tabele, nie można oczekiwać niczego więcej za pomocą wyrażeń regularnych ..
mehmet
1
@FrozenFlame It is not! Domyślnie pokazuje, co jest w waszych search_path, i że domyślne do "$user", public.*. W związku z tym set search_path=s; \dtma zamiar wyświetlić wszystkie tabele w schemacie s.
Lukas Juhrich
257

Możesz wybrać tabele z information_schema

SELECT * FROM information_schema.tables 
WHERE table_schema = 'public'
Jakub Kania
źródło
6
bardzo pomocne, jeśli twój interfejs nie obsługuje skrótów. dzięki.
Matt Bannert
1
Jest to również miłe, ponieważ możesz zrobić coś takiego jak select table_schema, table_name z information_schema.tables, gdzie table_name jak '%okolwiek%'; jeśli chcesz wiedzieć, w którym schemacie znajduje się tabela. Nie jestem pewien, czy możesz to zrobić za pomocą \ dt
Josh Brown
2
Dziękujemy, działa na Amazon Redshift i \ dt (zaakceptowana odpowiedź) nie działa.
Carlos2W,
2
To jest najbardziej użyteczna odpowiedź. schemat_informacyjny jest zdefiniowany w standardach SQL i dostępny w większości zgodnych baz danych
Davos
54

Alternatywnie information_schemamożna użyć pg_tables:

select * from pg_tables where schemaname='public';
Radek Postołowicz
źródło
3
zwróć uwagę, że jeśli chcesz tylko nazwa tabeli, to wynikowe zapytanieSELECT tablename FROM pg_tables WHERE schemaname = 'public';
Grant Humphries
Znaleziono problem z uprawnieniami polegający na information_schemanie wyświetlaniu pozycji ze publicschematu, ale pg_tablesmetoda działała dobrze. Wielkie dzięki!
John Crawford,
8

Dla tych, którzy napotkają to w przyszłości:

Jeśli chcesz zobaczyć listę relacji dla kilku schematów:

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