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.


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.


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');

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

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.


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;        
**************************

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.


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


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.* 

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


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';

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

12
select 
  * 
from 
  pg_catalog.pg_tables 
where 
  schemaname != 'information_schema' 
  and schemaname != 'pg_catalog';

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.


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.


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

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+

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.


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

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.



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

-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

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.