PostgreSQL: Hiển thị bảng trong PostgreSQL


Câu trả lời:


2661

Từ psqlgiao diện dòng lệnh,

Đầu tiên, chọn cơ sở dữ liệu của bạn

\c database_name

Sau đó, điều này hiển thị tất cả các bảng trong lược đồ hiện tại:

\dt

Tất nhiên là có lập trình (hoặc từ psqlgiao diện):

SELECT * FROM pg_catalog.pg_tables;

Các bảng hệ thống sống trong pg_catalogcơ sở dữ liệu.


102
@StephenCorwin Không, \ltương đương với show databasesMySQL. dtshow tableslshow databases
user454322

12
\dtrất hữu ích Cái đó pg_catalog.pg_tablesít hơn nhiều, vì nó xuất hiện gộp các bảng nội bộ cùng với các bảng do người dùng tạo cho bất kỳ cơ sở dữ liệu nào bạn tình cờ được kết nối.
aroth

33
psql my_db_namenên được chạy \dtđể làm việc Khi tôi chạy psqlmà không có tên cơ sở dữ liệu, tôi nhận được thông báo "Không tìm thấy quan hệ"
Maksim Dmitriev

31
Không có bảng hệ thống:SELECT * FROM pg_catalog.pg_tables WHERE schemaname != 'pg_catalog' AND schemaname != 'information_schema'
Matt White

39
Trước tiên bạn cần \c <DATABASE_NAME>chọn cơ sở dữ liệu của bạn.
danio

200

Đăng nhập như siêu người dùng:

sudo -u postgres psql

Bạn có thể liệt kê tất cả các cơ sở dữ liệu và người dùng theo \llệnh, (liệt kê các lệnh khác theo\? ).

Bây giờ nếu bạn muốn xem cơ sở dữ liệu khác mà bạn có thể thay đổi người sử dụng / cơ sở dữ liệu bằng \clệnh như \c template1, \c postgres postgresvà sử dụng \d, \dthoặc \dSđể xem bảng / views / etc.


1
Đây là một câu trả lời tốt hơn, vì người ta thường có thể có nhiều hơn một cơ sở dữ liệu được cài đặt.
Jerome

Điều này rất hữu ích. Cảm ơn bạn.
Promise Preston

123

(Để hoàn thiện)

Bạn cũng có thể truy vấn lược đồ thông tin (tiêu chuẩn 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 mặc dù để hoàn thiện, các bảng hiển thị mysql chỉ hiển thị lược đồ hiện tại, thật tốt khi nghĩ về nó theo cách này, mysql chỉ có một cơ sở dữ liệu nhưng nhiều lược đồ, trong đó postgresql có thể có cơ sở dữ liệu đa dạng (danh mục) và lược đồ. Vì vậy, đẳng thức phải là table_schema = 'DB_NAME';
La Mã

Không chính xác sql tiêu chuẩn, không thể sử dụng "||" để nối chuỗi trên
mssql

123

Bạn có thể sử dụng thiết bị đầu cuối tương tác Psql của PostgreQuery để hiển thị các bảng trong PostgreSQL.

1. Bắt đầu Psql

Thông thường bạn có thể chạy lệnh sau để nhập vào psql:

psql DBNAME USERNAME

Ví dụ, psql template1 postgres

Một tình huống bạn có thể có là: giả sử bạn đăng nhập bằng root và bạn không nhớ tên cơ sở dữ liệu. Bạn chỉ có thể nhập đầu tiên vào Psql bằng cách chạy:

sudo -u postgres psql

Trong một số hệ thống, lệnh sudo không khả dụng, thay vào đó bạn có thể chạy một trong hai lệnh dưới đây:

psql -U postgres
psql --username=postgres

2. Hiển thị bảng

Bây giờ trong Psql bạn có thể chạy các lệnh như:

  1. \? liệt kê tất cả các lệnh
  2. \l liệt kê cơ sở dữ liệu
  3. \conninfo hiển thị thông tin về kết nối hiện tại
  4. \c [DBNAME] kết nối với cơ sở dữ liệu mới, vd \c template1
  5. \dt bảng liệt kê các lược đồ công cộng
  6. \dt <schema-name>.* liệt kê các bảng của lược đồ nhất định, ví dụ, \dt public.*
  7. \dt *.* bảng liệt kê tất cả các lược đồ
  8. Sau đó, bạn có thể chạy các câu lệnh SQL, ví dụ: SELECT * FROM my_table;(Lưu ý: một câu lệnh phải được chấm dứt bằng dấu chấm phẩy ;)
  9. \q thoát khỏi psql

52
  1. Đăng nhập lần đầu với tư cách người dùng postgres:

    sudo su - postgres

  2. kết nối với db yêu cầu: psql -d databaseName

  3. \dt sẽ trả về danh sách tất cả các bảng trong cơ sở dữ liệu bạn đã kết nối.


40

Chạy psql với cờ -E sẽ lặp lại truy vấn được sử dụng nội bộ để triển khai \ dt và tương tự:

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 được sử dụng để lưu trữ các giá trị lớn: postgresql.org/docs/8.3/static/st Storage
Dorian

39

Đăng nhập như một siêu người dùng để bạn có thể kiểm tra tất cả các cơ sở dữ liệu và lược đồ của họ: -

sudo su - postgres

Sau đó, chúng ta có thể truy cập shell postgresql bằng cách sử dụng lệnh sau: -

psql

Bây giờ bạn có thể kiểm tra tất cả các danh sách cơ sở dữ liệu bằng cách sử dụng lệnh sau: -

\l

Nếu bạn muốn kiểm tra kích thước của cơ sở dữ liệu cũng sử dụng: -

\l+

Nhấn qđể quay lại.

Khi bạn đã tìm thấy cơ sở dữ liệu của mình, bạn có thể kết nối với cơ sở dữ liệu đó bằng lệnh sau: -

\c database_name

Sau khi kết nối, bạn có thể kiểm tra các bảng cơ sở dữ liệu hoặc lược đồ bằng cách: -

\d

Bây giờ để trở lại vỏ sử dụng: -

q

Bây giờ để xem thêm chi tiết về việc sử dụng bảng nhất định: -

\d table_name

Để quay lại postgresql_shell nhấn \q.

Và để trở lại báo chí thiết bị đầu cuối exit.


24

Nếu bạn chỉ muốn xem danh sách các bảng bạn đã tạo, bạn chỉ có thể nói:

\dt

Nhưng chúng tôi cũng có PATTERNcái nào sẽ giúp bạn tùy chỉnh bảng nào sẽ hiển thị. Để hiển thị tất cả bao gồm pg_catalogSchema, bạn có thể thêm *.

\dt *

Nếu bạn làm: \?

\ dt [S +] [MẪU] bảng liệt kê


23

chỉ sử dụng để xem bảng

=> \dt

nếu muốn xem bảng lược đồ

=>\dt+

nếu bạn muốn xem các bảng lược đồ cụ thể

=>\dt schema_name.* 

Tôi khá chắc chắn rằng bạn đang nhầm lẫn +với S. Cái sau (chữ cái) hiển thị các bảng lược đồ. Đơn +giản chỉ cần hiển thị thêm thông tin.
Garret Wilson

20

Đầu tiên Kết nối với cơ sở dữ liệu bằng lệnh sau

\c database_name

Và bạn sẽ thấy thông báo này - You are now connected to database database_name. Và họ chạy lệnh sau

SELECT * FROM table_name;

Trong cơ sở dữ liệu và tên_bảng chỉ cần cập nhật với cơ sở dữ liệu và tên bảng của bạn


20
Tôi không chắc đây là câu trả lời. Tôi nghĩ rằng OP đang (cố gắng) biết tất cả các bảng trong cơ sở dữ liệu của mình, không nhận được tất cả các hàng từ một bảng cụ thể trong cơ sở dữ liệu của mình ... phải không?
rình mò

16

Nếu bạn đang sử dụng pgAdmin4 trong PostgreSQL, bạn có thể sử dụng điều này để hiển thị các bảng trong cơ sở dữ liệu của bạn:

select * from information_schema.tables where table_schema='public';

14

Lưu ý rằng \dtmột mình sẽ liệt kê các bảng trong công chúng lược đồ của cơ sở dữ liệu bạn đang sử dụng. Tôi thích giữ các bảng của mình trong các lược đồ riêng biệt, vì vậy câu trả lời được chấp nhận không phù hợp với tôi.

Để liệt kê tất cả các bảng trong một lược đồ cụ thể , tôi cần phải:

1) Kết nối với cơ sở dữ liệu mong muốn:

psql mydb

2) Chỉ định tên lược đồ tôi muốn xem các bảng sau \dtlệnh, như thế này:

\dt myschema.*

Điều này cho tôi thấy kết quả mà tôi quan tâm:

               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 (không * bắt buộc) - sẽ liệt kê tất cả các bảng cho cơ sở dữ liệu hiện có mà bạn đã kết nối. Cũng hữu ích để lưu ý:

\ d [tên_bảng] - sẽ hiển thị tất cả các cột cho một bảng đã cho bao gồm thông tin loại, tham chiếu và các ràng buộc chính.


6

Bạn có thể liệt kê các bảng trong cơ sở dữ liệu hiện tại với \dt .

Fwiw, \d tablenamesẽ hiển thị chi tiết về bảng đã cho, giống như show columns from tablenametrong MySQL, nhưng với một ít thông tin hơn.


5

Sử dụng psql : \ dt

Hoặc là:

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

Trước hết bạn phải kết nối với cơ sở dữ liệu của bạn như

cơ sở dữ liệu của tôi là Ubuntu

sử dụng lệnh này để kết nối

 \c ubuntu

Thông báo này sẽ hiển thị

"Bây giờ bạn đã được kết nối với cơ sở dữ liệu" ubfox "với tư cách là người dùng" postgres "."

Hiện nay

Chạy lệnh này để hiển thị tất cả các bảng trong đó

\d+

3

Cách đơn giản nhất để liệt kê tất cả các bảng tại dòng lệnh là, theo sở thích của tôi:

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

Đối với một cơ sở dữ liệu nhất định, chỉ cần thêm tên cơ sở dữ liệu:

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

Nó hoạt động trên cả Linux và Windows.


3

như một oneliner nhanh

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

hoặc nếu bạn thích đa lớp đầu ra json rõ ràng hơn nhiều:

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 sẽ liệt kê các bảng và "\ pset pager off" hiển thị chúng trong cùng một cửa sổ, mà không chuyển sang một bảng riêng biệt. Yêu tính năng đó đến chết trong dbshell.



0

Đầu tiên, nhập cơ sở dữ liệu nào bạn cần kết nối

\c database_name

Sau đó, điều này hiển thị tất cả các bảng trong lược đồ hiện tại:

\dt

-2

Trước tiên, bạn có thể kết nối với cơ sở dữ liệu postgres của mình bằng postgre.app trên mac hoặc sử dụng postico. Chạy lệnh sau:

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

sau đó bạn nhập mật khẩu của bạn, điều này sẽ cung cấp quyền truy cập vào cơ sở dữ liệu của bạn

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.