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?

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).


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'

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';

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
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.