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
Odpowiedź
Zwróć uwagę na następujące polecenia:
-  
\listlub\l: wyświetl wszystkie bazy danych -  
\dt: wyświetl wszystkie tabele w bieżącej bazie danych, używającsearch_path -  
\dt *.: wyświetla wszystkie tabele w bieżącej bazie danych, niezależnie odsearch_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. -  
\dtnie ' nie pojawia się na liście wszystkich tabel w bieżącej bazie danych (wydaje się wykluczać te, których nie ' nie znaleziono wsearch_pathprzynajmniej 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.
 
psql -lpsql --username=postgres -l.