Jak wyświetlić listę wszystkich baz danych i tabel przy użyciu psql?


935

Próbuję nauczyć się administrowania PostgreSQL i zacząłem uczyć się korzystać z narzędzia wiersza polecenia 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.Stworzyłem dwie bazy danych i kilka tabel z pgAdmin III, więc wiem, że powinny być wymienione.

1,226

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

  • \list lub \l : wyświetl wszystkie bazy danych
  • \dt : wyświetl listę wszystkich tabel w bieżącej bazie danych

Nigdy nie zobaczysz tabel w innych bazach danych, te tabele nie są widoczne.Musisz połączyć się z właściwą bazą danych, aby zobaczyć jej tabele (i inne obiekty).

Aby przełączyć bazy danych:

\connect database_name

Zobacz podręcznik o psql .

+115

Możesz użyć '' 'c db_name''', aby połączyć się z określoną bazą danych. 17 lut. 132013-02-17 08:57:50

+8

'dt' nie wydaje się wymieniać wszystkich tabel w bieżącej bazie danych (wydaje się, że wyklucza te, które nie zostały znalezione w' ścieżce_wyszukiwania' co najmniej 9.2) 06 sie. 132013-08-06 19:42:24

+16

'dt * .' wyświetli wszystkie tabele we wszystkich schematach, bez konieczności modyfikowania ścieżki wyszukiwania. 24 mar. 152015-03-24 16:10:34

+14

l + jest moim ulubionym - pokazuje również użycie dysku. 21 maj. 152015-05-21 05:57:42

  0

W systemie Windows mogę wyświetlić listę baz danych za pomocą tego polecenia 'psql -U nazwa_użytkownika -l', ale nie działa ono z wersją ukośnika. 06 paź. 152015-10-06 15:37:48

  0

Szukałem tego typu polecenia 'psql -c" l "template1', gdzie mogę go uruchomić z linii poleceń. 26 maj. 172017-05-26 19:45:51

  0

Warto zauważyć (od 9.6): przy 2+ schematach w ścieżce wyszukiwania i tej samej nazwie tabeli w różnych schematach, dt zwróci tylko pierwszą tabelę o tej samej nazwie, zgodnie z kolejnością w ścieżce wyszukiwania.Znalazłem to dziwne. 17 paź. 172017-10-17 16:25:29


64

\l jest także skrótem \list .Istnieje kilka komend ukośnika, które możesz wyświetlić w psql, używając \? .


256

Zawiera listę baz danych:

SELECT datname FROM pg_database
WHERE datistemplate = false;

Wyświetla listę tabel w bieżącej bazie danych

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

Masz rację, ale pytanie dotyczyło meta-poleceń narzędzia psql.dt jest znacznie łatwiejsze niż wpisanie dowolnego zapytania. 18 lut. 112011-02-18 07:50:28

+11

Myślę, że jest to ŚWIETNA odpowiedź, ponieważ może być wykonana z linii poleceń Linuksa, w przeciwieństwie do konieczności używania interpretera psql, który czasem zawiesza się dla mnie przy użyciu ExtraPutty. 16 maj. 152015-05-16 17:51:18

+1

Uratowałem także mój dzień.W moim szczególnym przypadku dodam 'WHERE table_schema = 'public'', ponieważ chcę usunąć tylko niestandardowe tabele. 28 wrz. 152015-09-28 15:31:58

+18

Jeśli uruchomisz psql z flagą -E, wyświetli prawdziwe zapytanie, gdy użyjesz meta-polecenia. 13 sty. 162016-01-13 09:03:31

  0

To dobra odpowiedź.Mimo, że OP chciał metakommand, byłem w tym celu googlingiem i to doprowadziło mnie do tego pytania. 03 sie. 172017-08-03 00:40:17


88

W Postgresql te polecenia terminalowe wyświetlają dostępne bazy danych

[email protected] $/bin/psql -h localhost --username=pgadmin --list

Albo polecenie podało więcej:

psql -U pgadmin -l

Te polecenia wypisują 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)

Są to dostępne bazy danych.

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

Musisz określić bazę danych, zanim będziesz mógł wyświetlić tabele w tej bazie danych.

[email protected]$ psql -U pgadmin -d kurz_prod

Spowoduje to przejście do terminala psql:

kurz_prod=#

Użyj polecenia \d co oznacza, pokaż wszystkie tabele, widoki i sekwencje

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 zamknąć terminal psql, wpisz \q i naciśnij enter.Lub Ctrl-D robi to samo.Są to tabele w tej bazie danych.

+4

d nie tylko wyświetla tabele: 'd [S +] listy tabel, widoki i sekwencje' 06 sie. 132013-08-06 19:43:18

+2

Dla mnie jest to „poprawna” odpowiedź, ponieważ nie wymaga już połączenia z istniejącą bazą danych. 14 mar. 172017-03-14 15:11:47


25

Z pg_Admin możesz po prostu uruchomić poniższe w bieżącej bazie danych i 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

Spowoduje to wyświetlenie listy wszystkich tabel stałych (ogólnie tabel, których szukasz).Możesz uzyskać tylko nazwy tabel, jeśli zmienisz*symbol wieloznaczny po prostutable_name.Publicznośćtable_schemajest domyślnym schematem dla większości baz danych, chyba że administrator skonfigurował nowy schemat.

+3

Chociaż jest to prawdą, dotyczy to innego klienta niż zapytał OP. 29 lis. 122012-11-29 17:56:23


17

Możliwe, że wstawiłeś tabele do schematu, który nie znajduje się w ścieżce wyszukiwania lub domyślny, tj. Publiczny, a więc tabele nie będą wyświetlane przy użyciu dt.Jeśli używasz schematu zwanego, powiedzmy, danymi, możesz to naprawić, uruchamiając,

alter database set search_path=data, public;

Wyjdź i ponownie wpisz psql, a teraz dt pokaże również tabele w danych schematu.

+1

Cóż, prosta 'set search_path = data, public;' też by to zrobiła :) 03 kwi. 142014-04-03 14:57:26

  0

@dezso, czy to powoduje zmianę na stałe, czy tylko w tej sesji psql? 03 kwi. 142014-04-03 17:40:36

  0

Err, nie byłam zbyt jasna.Było to zamierzone zamiast cyklu wylogowania-logowania. 03 kwi. 142014-04-03 18:12:37


24

Aby uzyskać więcej informacji na temat bazy danych i listy tabel, możesz to zrobić:

\l+ aby wyświetlić bazy 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ć listę wszystkich tabel w bieżącym schemacie path_path 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)