Kiedy robię \dt
w psql, otrzymuję tylko listę tabel w bieżącym schemacie (domyślnie public
).Tabele tabel w schemacie PostgreSQL
Jak uzyskać listę wszystkich tabel we wszystkich schematach lub w określonym schemacie?
Kiedy robię \dt
w psql, otrzymuję tylko listę tabel w bieżącym schemacie (domyślnie public
).Tabele tabel w schemacie PostgreSQL
Jak uzyskać listę wszystkich tabel we wszystkich schematach lub w określonym schemacie?
We wszystkich schematach:
=> \dt *.*
W konkretnym schemacie:
=> \dt public.*
Jest możliwe użycie regular expressions with some restrictions
\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 regularnych, takich jak klasy znaków, na przykład [0-9], aby dopasować dowolną cyfrę. Wszystkie znaki specjalne wyrażenia regularnego działają zgodnie z opisem w sekcji 9.7.3, z wyjątkiem. który jest traktowany jako separator, jak wspomniano powyżej, * który jest tłumaczony na notację regularną. ,? która jest tłumaczona na., i $, która jest dopasowana dosłownie. Możesz naśladować te znaki w razie potrzeby, pisząc? dla., (R + |) dla R lub (R |) dla R ?. $ nie jest potrzebne jako znak wyrażeń regularnych, ponieważ wzorzec musi pasować do całej nazwy, w przeciwieństwie do zwykłej interpretacji wyrażeń regularnych (innymi słowy, $ jest automatycznie dołączane do twojego wzorca). Napisz * na początku i/lub końcu, jeśli nie chcesz, aby wzór był zakotwiczony. Zauważ, że w podwójnych cudzysłowach wszystkie specjalne znaki specjalne tracą swoje specjalne znaczenia i są dosłownie dopasowane. Również znaki specjalne wyrażenia regularnego są dosłownie dopasowane do wzorców nazw operatorów (tj. Do argumentu \ do).
Można wybrać tabele z information_schema
SELECT * FROM information_schema.tables
WHERE table_schema = 'public'
Bardzo pomocne, jeśli twój interfejs nie obsługuje skrótów. dzięki. –
To jest również miłe, ponieważ można zrobić coś takiego, jak wybrać table_schema, nazwa_tabeli z pliku_informacyjnego.tabela gdzie nazwa_tabeli taka jak "% cokolwiek%"; jeśli chcesz wiedzieć, w którym schemacie znajduje się tabela. Nie wiesz, czy możesz to zrobić za pomocą \ dt –
Dziękuję, działa na Amazon Redshift, a \ dt (zaakceptowana odpowiedź) nie działa. – Carlos2W
Alternatywnie do information_schema
możliwe jest użycie pg_tables
:
select * from pg_tables where schemaname='public';
pamiętać, że jeśli chcą tylko nazwa tabeli jest kwerenda wypadkowa jest 'SELECT nazwa_tabeli FROM pg_tables GDZIE nazwa_schematu =„publiczna”;' –
Znaleziono problem uprawnienia z 'nie information_schema' wystawianie przedmiotów z' public 'schema, ale metoda' pg_tables' działała ładnie. Wielkie dzięki! –
Dla tych, napotykając to w przyszłości:
Jeśli chcesz zobaczyć listę relations 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
Po prostu '\ dt' jest równoważne' \ dt public. * ', czy mam rację? –
Co powiesz na przykład na dwie konkretne tabele w określonym schemacie? Jak '\ dt public.user_info, public.user_scope'? –
Nieważne, łatwiej jest zrobić '\ dt public.a; \ dt public.b; 'w jednej linii. –