Jak wyświetlić listę wszystkich baz danych i tabel za pomocą psql?

Próbuję nauczyć się administrowania PostgreSQL i zacząłem uczyć się, jak używać narzędzia wiersza poleceń psql.

Kiedy loguję się za pomocą psql --username=postgres, jak wyświetlić listę wszystkich baz danych i tabel?

Próbowałem \d, d i dS+, ale nic nie jest wymienione. Utworzyłem dwie bazy danych i kilka tabel za pomocą pgAdmin III, więc wiem, że powinny być wymienione.

Komentarze

  • Jeśli chcesz uzyskać do niego dostęp z wiersza poleceń uruchom psql -l
  • Ten komentarz z pewnością powinien być jedną z najlepszych odpowiedzi! Jeśli potrzebujesz autoryzacji, możesz również psql --username=postgres -l.

Odpowiedź

Zwróć uwagę na następujące polecenia:

  • \list lub \l: wyświetl wszystkie bazy danych
  • \dt: wyświetl wszystkie tabele w bieżącej bazie danych, używając search_path
  • \dt *.: wyświetla wszystkie tabele w bieżącej bazie danych, niezależnie od search_path

Nigdy nie zobaczysz tabel w innych bazach danych, te tabele nie są widoczne. Aby zobaczyć jej tabele (i inne obiekty), musisz połączyć się z odpowiednią bazą danych.

Aby przełączyć bazy danych:

\connect database_name lub \c database_name

Zobacz podręcznik dotyczący psql .

Komentarze

  • Możesz użyć \c db_name, aby połączyć się z określoną bazą danych.
  • \dt nie ' nie pojawia się na liście wszystkich tabel w bieżącej bazie danych (wydaje się wykluczać te, których nie ' nie znaleziono w search_path przynajmniej w wersji 9.2)
  • \dt *. wyświetli listę wszystkich tabel we wszystkich schematach, bez konieczności modyfikowania ścieżki wyszukiwania.
  • \ l + jest mój ulubiony – pokazuje również użycie dysku.
  • W systemie Windows mogę wyświetlić listę baz danych za pomocą tego polecenia psql -U username -l, ale nie działa to z wersją z ukośnikiem.

Odpowiedź

Zawiera listę baz danych:

SELECT datname FROM pg_database WHERE datistemplate = false; 

Ta lista zawiera tabele w bieżącej bazie danych

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

Komentarze

  • Ty ' zgadza się, ale pytanie dotyczyło meta-poleceń narzędzia psql. \ dt jest o wiele łatwiejsze niż wpisywanie jakiegokolwiek zapytania.
  • Myślę, że jest to WSPANIAŁA odpowiedź, ponieważ można ją wykonać z wiersza poleceń Linuksa, w przeciwieństwie do konieczności korzystania z interpretera psql, który czasami zawiesza się przy użyciu ExtraPutty.
  • Uratowałem też mój dzień. W moim przypadku ' m dodając WHERE table_schema = 'public', ponieważ chcę porzucić tylko niestandardowe tabele.
  • Jeśli zaczniesz psql z flagą -E, wyświetli prawdziwe zapytanie, gdy użyjesz meta-polecenia.
  • Tak, myślę, że ' to dobra odpowiedź, ponieważ umożliwia łączenie się i wysyłanie zapytań do baz danych w bardziej kontrolowany sposób, szczególnie gdy chcesz wygenerować skrypt z dużej listy baz danych. Dzięki.

Odpowiedz

W Postgresql te polecenia terminala zawierają listę dostępnych baz danych

el@defiant$ /bin/psql -h localhost --username=pgadmin --list 

Lub polecenie podane prościej:

psql -U pgadmin -l 

Te polecenia wyświetlają to na terminalu:

 List of databases Name | Owner | Encoding | Collate | Ctype | Access privileges -----------+----------+----------+-------------+-------------+----------------------- kurz_prod | pgadmin | UTF8 | en_US.UTF-8 | en_US.UTF-8 | pgadmin | pgadmin | UTF8 | en_US.UTF-8 | en_US.UTF-8 | postgres | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 | template0 | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 | =c/postgres + | | | | | postgres=CTc/postgres template1 | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 | =c/postgres + | | | | | postgres=CTc/postgres (5 rows) 

To są dostępne bazy danych.

W PSQL te polecenia wyświetlają dostępne tabele

Musisz określić bazę danych przed może wyświetlić tabele w tej bazie danych.

el@defiant$ psql -U pgadmin -d kurz_prod 

To przeniesie Cię do terminala psql:

kurz_prod=# 

Użyj polecenia \d, co oznacza wyświetlenie wszystkich tabel, widoków i sekwencji

kurz_prod=# \d 

To drukuje:

 List of relations Schema | Name | Type | Owner --------+---------+----------+--------- public | mytable | table | pgadmin public | testing | sequence | pgadmin (2 rows) 

Następnie, aby wyjść z terminala psql, wpisz \q i naciśnij Enter. Lub Ctrl-D robi to samo. To są tabele w tej bazie danych.

Komentarze

  • \ d zawiera nie tylko listę tabel: \d[S+] list tables, views, and sequences
  • Dla mnie to jest ” poprawna ” odpowiedź, ponieważ nie ' t wymaga, abyś był już połączony z istniejącą bazą danych.
  • Jedna linijka do użytku w skryptach (jako root): su - -c 'psql -U postgres postgres -P pager=off -P tuples_only=on -l' postgres | cut -d'|' -f1 | tr -d '[:blank:]' | grep -vE '$^'

Odpowiedź

\l to także skrót \list. Jest sporo poleceń z ukośnikiem, które możesz wyświetlić w psql, używając \?.

Odpowiedź

Aby uzyskać więcej informacji o bazie danych i liście tabel, możesz:

\l+, aby wyświetlić listę baz danych

 List of databases Name | Owner | Encoding | Collate | Ctype | Access privileges | Size | Tablespace | Description ------------+----------+----------+-------------+-------------+-----------------------+---------+------------+-------------------------------------------- pgbench | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 | | 29 MB | pg_default | postgres | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 | | 6073 kB | pg_default | default administrative connection database slonmaster | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 | | 1401 MB | movespace | slonslave | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 | | 32 MB | pg_default | template0 | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 | =c/postgres +| 5785 kB | pg_default | unmodifiable empty database | | | | | postgres=CTc/postgres | | | template1 | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 | =c/postgres +| 5985 kB | pg_default | default template for new databases | | | | | postgres=CTc/postgres | | | test | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 | | 13 MB | pg_default | (7 rows) 

i

\d+, aby wyświetlić wszystkie tabele w bieżącym schemacie ścieżka_wyszukiwania w bieżącej bazie danych.

test=# \dn+ --list schemas List of schemas Name | Owner | Access privileges | Description --------+----------+----------------------+------------------------ public | postgres | postgres=UC/postgres+| standard public schema | | =UC/postgres | schema1 | postgres | postgres=UC/postgres+| | | =UC/postgres | (2 row) test=# set search_path to schema1, public; SET test=# \d+ List of relations Schema | Name | Type | Owner | Size | Description ---------+-----------------+-------+--------------+------------+------------- public | all_units | table | postgres | 0 bytes | public | asset | table | postgres | 16 kB | public | asset_attribute | table | postgres | 8192 bytes | public | food | table | postgres | 48 kB | public | name_log | table | postgres | 8192 bytes | public | outable | table | ordinaryuser | 0 bytes | public | outable2 | table | ordinaryuser | 0 bytes | public | test | table | postgres | 16 kB | public | usr | table | postgres | 5008 kB | schema1 | t1 | table | postgres | 0 bytes | (10 rows) 

Odpowiedź

Z pg_Admin możesz po prostu uruchomić następujące polecenie w swojej aktualnej bazie danych, a otrzymasz wszystkie tabele dla określonego schematu:

SELECT * FROM information_schema.tables WHERE table_type = "BASE TABLE" AND table_schema = "public" ORDER BY table_type, table_name 

To da ci listę wszystkich stałych tabel (zazwyczaj tabel, których szukasz). Możesz uzyskać tylko nazwy tabel, jeśli zmienisz symbol wieloznaczny * na tylko table_name. Publiczny table_schema to domyślny schemat większości baz danych, chyba że administrator skonfigurował nowy schemat.

Komentarze

  • To prawda, ale dotyczy to innego klienta niż pytał OP.
  • To zadziałało świetnie i chociaż mój przypadek użycia nie był dokładnie tym, o co prosił OP, pomógł mi uzyskać listę tabel podczas połączenia przez wrapper (w Julialang LibPQ.jl )

Odpowiedź

Możliwe, że wstawiłeś tabele do schemat, którego nie ma w Twojej ścieżce wyszukiwania lub domyślny, tj. publiczny, dlatego tabele nie będą wyświetlane przy użyciu \ dt. Jeśli używasz schematu o nazwie, powiedzmy, data, możesz to naprawić, uruchamiając,

alter database <databasename> set search_path=data, public;

Wyjdź i ponownie wprowadź psql i teraz \ dt pokaże również tabele w danych schematu.

Komentarze

  • Cóż, prosty set search_path=data, public; też by załatwił sprawę 🙂
  • @dezso, czy to powoduje zmianę na stałe, czy tylko w tej sesji psql?
  • Eee, nie byłem zbyt jasny. Miało to miejsce zamiast cyklu wylogowania-logowania.

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *