PostgreSQL: Pokaż tabele w PostgreSQL

Odpowiedzi:

2660

Od psql interfejsu wiersza poleceń

Najpierw wybierz bazę danych

\c database_name

Następnie pokazuje wszystkie tabele w bieżącym schemacie:

\dt

Programowo (lub psqloczywiście również z interfejsu):

SELECT * FROM pg_catalog.pg_tables;

Tabele systemowe znajdują się w pg_catalogbazie danych.

Mihai Limbășan
źródło
102
@StephenCorwin Nie, \ljest odpowiednikiem show databasesMySQL. dtshow tablesi lshow databases
użytkownik454322
12
\dtjest bardzo przydatne. Ten pg_catalog.pg_tablesjest o wiele mniejszy, ponieważ wydaje się, że łączy on tabele wewnętrzne z tabelami utworzonymi przez użytkownika dla dowolnej bazy danych, z którą się łączysz.
aroth
33
psql my_db_namenależy uruchomić, \dtaby działać. Kiedy prowadziłem psqlbez nazwy bazy danych, otrzymałem komunikat „Nie znaleziono relacji”
Maksim Dmitriev
31
Bez tabel systemowych:SELECT * FROM pg_catalog.pg_tables WHERE schemaname != 'pg_catalog' AND schemaname != 'information_schema'
Matt White
39
Najpierw musisz \c <DATABASE_NAME>wybrać bazę danych.
danio
200

Zaloguj się jako administrator:

sudo -u postgres psql

Możesz wyświetlić listę wszystkich baz danych i użytkowników według \lpoleceń (listę innych poleceń według\? ).

Teraz, jeśli chcesz zobaczyć innych baz danych można zmienić przez użytkownika / bazy \cpoleceniem \c template1, \c postgres postgresi użytkowania \d, \dtlub\dS zobaczyć tabele / widoki / etc.

JLarky
źródło
1
To lepsza odpowiedź, ponieważ na ogół może być zainstalowanych więcej niż jedna baza danych.
Jerome
To było bardzo pomocne. Dziękuję Ci.
Obiecaj Preston
123

(Dla pełności)

Można również wykonać zapytanie do schematu informacyjnego (standard SQL) :

SELECT
    table_schema || '.' || table_name
FROM
    information_schema.tables
WHERE
    table_type = 'BASE TABLE'
AND
    table_schema NOT IN ('pg_catalog', 'information_schema');
Milen A. Radev
źródło
3
+1, chociaż dla kompletności mysql pokazuje tabele pokazuje tylko bieżący schemat, dobrze jest o tym myśleć, mysql ma tylko jedną bazę danych, ale wiele schematów, gdzie postgresql może mieć wiele baz danych (katalogów) i schematów. Więc equiv powinien być table_schema = 'DB_NAME';
Rahly
Niezupełnie standardowy sql, nie można użyć „||” do łączenia łańcuchów na mssql
ChRoNoN
122

Możesz użyć interaktywnego terminalu PostgreSQL Psql, aby wyświetlić tabele w PostgreSQL.

1. Uruchom Psql

Zwykle możesz uruchomić następującą komendę, aby wejść do psql:

psql DBNAME USERNAME

Na przykład, psql template1 postgres

Jedną z możliwych sytuacji jest: załóżmy, że logujesz się jako root i nie pamiętasz nazwy bazy danych. Możesz po prostu wprowadzić najpierw Psql, uruchamiając:

sudo -u postgres psql

W niektórych systemach polecenie sudo nie jest dostępne, możesz zamiast tego uruchomić dowolne z poniższych poleceń:

psql -U postgres
psql --username=postgres

2. Pokaż tabele

Teraz w Psql możesz uruchamiać polecenia takie jak:

  1. \? wypisz wszystkie polecenia
  2. \l listy baz danych
  3. \conninfo wyświetlać informacje o bieżącym połączeniu
  4. \c [DBNAME] połączyć się z nową bazą danych, np. \c template1
  5. \dt wyświetla tabele schematu publicznego
  6. \dt <schema-name>.* wyświetla tabele niektórych schematów, np. \dt public.*
  7. \dt *.* wyświetla tabele wszystkich schematów
  8. Następnie możesz uruchomić instrukcje SQL, np. SELECT * FROM my_table;(Uwaga: instrukcja musi być zakończona średnikiem ;)
  9. \q zamknij psql
Yuci
źródło
52
  1. Pierwsze logowanie jako użytkownik postgres:

    sudo su - postgres

  2. połącz z wymaganym db: psql -d databaseName

  3. \dt zwróci listę wszystkich tabel w bazie danych, z którą jesteś połączony.

nish
źródło
40

Uruchomienie psql z flagą -E spowoduje wyświetlenie zapytania używanego wewnętrznie do implementacji \ dt i podobnych:

sudo -u postgres psql -E

postgres=# \dt       
********* QUERY **********
SELECT n.nspname as "Schema",
c.relname as "Name", 
CASE c.relkind WHEN 'r' THEN 'table' WHEN 'v' THEN 'view' WHEN 'i' THEN 'index' WHEN 'S' THEN 'sequence' WHEN 's' THEN 'special' END as "Type",
pg_catalog.pg_get_userbyid(c.relowner) as "Owner"
FROM pg_catalog.pg_class c
    LEFT JOIN pg_catalog.pg_namespace n ON n.oid = c.relnamespace
WHERE c.relkind IN ('r','')
    AND n.nspname <> 'pg_catalog'
    AND n.nspname <> 'information_schema'
    AND n.nspname !~ '^pg_toast'
AND pg_catalog.pg_table_is_visible(c.oid)
ORDER BY 1,2;        
**************************
bsb
źródło
1
BTW, TOAST służy do przechowywania dużych wartości: postgresql.org/docs/8.3/static/storage-toast.html
Dorian
39

Zaloguj się jako administrator, aby sprawdzić wszystkie bazy danych i ich schematy: -

sudo su - postgres

Następnie możemy dostać się do powłoki postgresql za pomocą następującego polecenia: -

psql

Możesz teraz sprawdzić listę wszystkich baz danych za pomocą następującego polecenia: -

\l

Jeśli chcesz również sprawdzić rozmiary baz danych, użyj: -

\l+

Naciśnij, qaby wrócić.

Po znalezieniu bazy danych możesz teraz połączyć się z tą bazą danych za pomocą następującego polecenia: -

\c database_name

Po podłączeniu możesz sprawdzić tabele bazy danych lub schemat:

\d

Teraz, aby powrócić do powłoki, użyj: -

q

Teraz, aby zobaczyć szczegóły dotyczące określonego stołu, użyj: -

\d table_name

Aby wrócić do postgresql_shell naciśnij \q.

Aby powrócić do terminalu, naciśnij exit.

Shashishekhar Hasabnis
źródło
24

Jeśli chcesz zobaczyć tylko listę utworzonych przez siebie tabel, możesz tylko powiedzieć:

\dt

Ale mamy również, PATTERNktóre pomogą Ci dostosować, które tabele mają być wyświetlane. Aby wyświetlić wszystkie, w tym pg_catalogschemat, możesz dodać *.

\dt *

Jeśli zrobisz: \?

\ dt [S +] [PATTERN] tabele list

Zbanowany_użytkownik
źródło
23

użyj tylko zobacz tabele

=> \dt

jeśli chcesz zobaczyć tabele schematów

=>\dt+

jeśli chcesz zobaczyć określone tabele schematów

=>\dt schema_name.* 
aryjski
źródło
Jestem całkiem pewien, że jesteś mylące +z S. Ten ostatni (litera) pokazuje tabele schematów. Po +prostu pokazuje dodatkowe informacje.
Garret Wilson
20

Najpierw połącz się z bazą danych za pomocą następującego polecenia

\c database_name

I zobaczysz tę wiadomość - You are now connected to database database_name. I uruchamiają następujące polecenie

SELECT * FROM table_name;

W nazwa_bazy_danych i nazwa_tabeli wystarczy zaktualizować nazwę bazy danych i tabeli

J4cK
źródło
20
Nie jestem pewien, czy to odpowiada na pytanie. Myślę, że OP próbuje (próbował) poznać wszystkie tabele w swojej bazie danych, a nie uzyskać wszystkich wierszy z określonej tabeli w swojej bazie danych ... prawda?
przytula
16

Jeśli używasz pgAdmin4 w PostgreSQL, możesz użyć tego do wyświetlenia tabel w bazie danych:

select * from information_schema.tables where table_schema='public';
Reynante Daitol
źródło
14

Zauważ, że \dtsam będzie wyświetlał tabele publicznie schemacie używanej bazy danych. Lubię trzymać swoje tabele w osobnych schematach, więc zaakceptowana odpowiedź nie działała dla mnie.

Aby wyświetlić listę wszystkich tabel w ramach określonego schematu , musiałem:

1) Połącz się z żądaną bazą danych:

psql mydb

2) Podaj nazwę schematu, dla której chcę zobaczyć tabele po \dtpoleceniu, w następujący sposób:

\dt myschema.*

To pokazuje mi wyniki, którymi jestem zainteresowany:

               List of relations
 Schema   |       Name      | Type  |  Owner   
----------+-----------------+-------+----------
 myschema | users           | table | postgres
 myschema | activity        | table | postgres
 myschema | roles           | table | postgres
rotarydial
źródło
12
select 
  * 
from 
  pg_catalog.pg_tables 
where 
  schemaname != 'information_schema' 
  and schemaname != 'pg_catalog';
Abdelhak Ohammou
źródło
8

\ dt (nie * wymagane) - wyświetli listę wszystkich tabel dla istniejącej bazy danych, z którą jesteś już połączony. Warto również zauważyć:

\ d [nazwa_tabeli] - pokaże wszystkie kolumny dla danej tabeli, w tym informacje o typie, referencje i kluczowe ograniczenia.

użytkownik4642897
źródło
6

Możesz wyświetlić tabele w bieżącej bazie danych za pomocą \dt .

Fwiw \d tablenamepokaże szczegóły dotyczące danej tabeli, coś show columns from tablenamew stylu MySQL, ale z nieco większą ilością informacji.

JohnK
źródło
5

Używając psql : \ dt

Lub:

SELECT c.relname AS Tables_in FROM pg_catalog.pg_class c
        LEFT JOIN pg_catalog.pg_namespace n ON n.oid = c.relnamespace
WHERE pg_catalog.pg_table_is_visible(c.oid)
        AND c.relkind = 'r'
        AND relname NOT LIKE 'pg_%'
ORDER BY 1
Mister Jooyson
źródło
3

Przede wszystkim musisz połączyć się z bazą danych jak

moja baza danych to ubuntu

użyj tego polecenia, aby się połączyć

 \c ubuntu

Ta wiadomość pojawi się

„Jesteś teraz połączony z bazą danych„ ubuntu ”jako użytkownik„ postgres ”.”

Teraz

Uruchom to polecenie, aby wyświetlić wszystkie tabele

\d+
Usman Yaqoob
źródło
3

Najprostszym sposobem na wyświetlenie wszystkich tabel w wierszu poleceń jest, według mojego gustu:

psql -a -U <user> -p <port> -h <server> -c "\dt"

Dla danej bazy danych po prostu dodaj nazwę bazy danych:

psql -a -U <user> -p <port> -h <server> -c "\dt" <database_name>

Działa zarówno w systemie Linux, jak i Windows.

Alain Cherpin
źródło
3

jako szybki oneliner

# just list all the postgres tables sorted in the terminal
db='my_db_name'
clear;psql -d $db -t -c '\dt'|cut -c 11-|perl -ne 's/^([a-z_0-9]*)( )(.*)/$1/; print'

lub jeśli wolisz dużo wyraźniejszy wielowarstwowy wydruk Json:

IFS='' read -r -d '' sql_code <<"EOF_CODE"
    select array_to_json(array_agg(row_to_json(t))) from (
        SELECT table_catalog,table_schema,table_name 
        FROM information_schema.tables
        ORDER BY table_schema,table_name ) t
EOF_CODE
psql -d postgres -t -q -c "$sql_code"|jq
Yordan Georgiev
źródło
1

\ dt wyświetli listę tabel, a „\ pset pager wyłączony” pokazuje je w tym samym oknie, bez przełączania się na osobny. Uwielbiam tę funkcję na śmierć w dbshell.

lauri108
źródło
0

Aby wyświetlić tabele obce w psql, uruchom \dE

Ian Hunter
źródło
0

Najpierw wprowadź bazę danych, z którą chcesz się połączyć

\c database_name

Następnie pokazuje wszystkie tabele w bieżącym schemacie:

\dt
Poonkodi
źródło
-2

Najpierw możesz połączyć się ze swoją bazą danych postgres za pomocą postgre.app na Macu lub używając Postico. Uruchom następujące polecenie:

psql -h localhost -p port_number -d database_name -U user_name -W

następnie wprowadź hasło, które powinno dać dostęp do twojej bazy danych

Patcho
źródło