Làm cách nào để liệt kê tất cả các cơ sở dữ liệu và bảng bằng psql?


935

Tôi đang cố gắng học quản trị PostgreSQL và đã bắt đầu học cách sử dụng công cụ dòng lệnh psql .

Khi tôi đăng nhập bằng psql --username=postgres , làm cách nào để liệt kê tất cả các cơ sở dữ liệu và bảng?

Tôi đã thử \d , ddS+ nhưng không được liệt kê.Tôi đã tạo hai cơ sở dữ liệu và một vài bảng với pgAdmin III, vì vậy tôi biết chúng nên được liệt kê.

1,226

Xin lưu ý các lệnh sau:

  • \list hoặc \l : liệt kê tất cả các cơ sở dữ liệu
  • \dt : liệt kê tất cả các bảng trong cơ sở dữ liệu hiện tại

Bạn sẽ không bao giờ nhìn thấy các bảng trong cơ sở dữ liệu khác, những bảng này không hiển thị.Bạn phải kết nối với cơ sở dữ liệu chính xác để xem các bảng của nó (và các đối tượng khác).

Để chuyển đổi cơ sở dữ liệu:

\connect database_name

Xem hướng dẫn về psql .

+115

Bạn có thể sử dụng '' '\ c db_name''' để kết nối với một cơ sở dữ liệu nhất định. 17 feb. 132013-02-17 08:57:50

+8

'\ dt' dường như không liệt kê tất cả các bảng trong cơ sở dữ liệu hiện tại (dường như loại trừ những bảng không tìm thấy trong' search_path' ít nhất là vào ngày 9.2) 06 aug. 132013-08-06 19:42:24

+16

'\ dt * .' sẽ liệt kê tất cả các bảng trong tất cả các lược đồ mà không phải sửa đổi đường dẫn tìm kiếm của bạn. 24 mar. 152015-03-24 16:10:34

+14

\ l + là sở thích của tôi - nó cũng hiển thị việc sử dụng đĩa. 21 may. 152015-05-21 05:57:42

  0

Trên Windows tôi có thể liệt kê các cơ sở dữ liệu bằng lệnh này 'psql -U tên người dùng -l' nhưng nó không hoạt động với phiên bản gạch chéo. 06 oct. 152015-10-06 15:37:48

  0

Tôi đã tìm kiếm loại lệnh này 'psql -c" \ l "template1' nơi tôi có thể chạy nó từ dòng lệnh. 26 may. 172017-05-26 19:45:51

  0

Đáng chú ý (kể từ 9.6): Với hơn 2 lược đồ trong search_path của bạn và cùng tên bảng có trong các lược đồ khác nhau, \ dt sẽ chỉ trả lại bảng đầu tiên có cùng tên, theo thứ tự trong search_path.Tôi thấy điều này kỳ lạ. 17 oct. 172017-10-17 16:25:29


64

\l cũng là viết tắt của \list .Có khá nhiều lệnh gạch chéo, bạn có thể liệt kê trong psql bằng cách sử dụng \? .


256

Danh sách này liệt kê các cơ sở dữ liệu:

SELECT datname FROM pg_database
WHERE datistemplate = false;

Danh sách này liệt kê các bảng trong cơ sở dữ liệu hiện tại

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

Bạn nói đúng, nhưng câu hỏi là về các lệnh meta của công cụ psql.\ dt dễ dàng hơn nhiều so với việc nhập bất kỳ truy vấn nào. 18 feb. 112011-02-18 07:50:28

+11

Tôi nghĩ rằng đây là một câu trả lời TUYỆT VỜI vì nó có thể được thực thi từ một dòng lệnh Linux, trái với việc cần phải có trong trình thông dịch psql đôi khi bị treo đối với tôi khi sử dụng ExtraPutty. 16 may. 152015-05-16 17:51:18

+1

Cũng tiết kiệm trong ngày của tôi.Đối với trường hợp cụ thể của tôi, tôi đang thêm 'WHERE table_schema = 'public'' vì tôi muốn bỏ chỉ các bảng tùy chỉnh. 28 sep. 152015-09-28 15:31:58

+18

Nếu bạn khởi động psql bằng cờ -E, nó sẽ hiển thị truy vấn thực khi bạn sử dụng lệnh meta. 13 jan. 162016-01-13 09:03:31

  0

Đây là một câu trả lời tốt.Mặc dù OP muốn các metacommands, tôi đã làm điều này và nó dẫn tôi đến câu hỏi này. 03 aug. 172017-08-03 00:40:17


88

Trong Postgresql các lệnh đầu cuối này liệt kê các cơ sở dữ liệu có sẵn

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

Hoặc lệnh được nêu đơn giản hơn:

psql -U pgadmin -l

Những lệnh này in trên thiết bị đầu cuối:

         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)

Đây là những cơ sở dữ liệu có sẵn.

Trong PSQL, các lệnh này liệt kê các bảng có sẵn

Bạn phải chỉ định một cơ sở dữ liệu trước khi bạn có thể liệt kê các bảng trong cơ sở dữ liệu đó.

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

Điều này đưa bạn đến một thiết bị đầu cuối psql:

kurz_prod=#

Sử dụng lệnh \d có nghĩa là hiển thị tất cả các bảng, dạng xem và trình tự

kurz_prod=# \d

Bản in này:

   List of relations
Schema | Name | Type | Owner
--------+---------+----------+---------
public | mytable | table | pgadmin
public | testing | sequence | pgadmin
(2 rows)

Sau đó, để thoát khỏi thiết bị đầu cuối psql, gõ \q và nhấn enter.Hoặc Ctrl-D cũng làm điều tương tự.Đây là các bảng trong cơ sở dữ liệu đó.

+4

\ d không chỉ liệt kê các bảng: '\ d [S +] liệt kê các bảng, dạng xem và trình tự' 06 aug. 132013-08-06 19:43:18

+2

Đối với tôi, đây là câu trả lời "đúng" bởi vì nó không yêu cầu bạn phải kết nối với cơ sở dữ liệu hiện có. 14 mar. 172017-03-14 15:11:47


25

Từ pg_Admin, bạn có thể chỉ cần chạy như sau trên cơ sở dữ liệu hiện tại của mình và nó sẽ nhận được tất cả các bảng cho lược đồ đã chỉ định:

SELECT * 
FROM information_schema.tables 
WHERE table_type = 'BASE TABLE' 
     AND table_schema = 'public' 
ORDER BY table_type, table_name

Điều này sẽ giúp bạn có một danh sách tất cả các bảng cố định (nói chung là các bảng bạn đang tìm kiếm).Bạn có thể nhận được chỉ là tên bảng nếu bạn thay đổi * đại diện để chỉ table_name .Công khai table_schema là lược đồ mặc định cho hầu hết các cơ sở dữ liệu trừ khi quản trị viên của bạn đã thiết lập một lược đồ mới.

+3

Mặc dù điều này là đúng, nhưng điều này giải quyết một khách hàng khác với OP đã hỏi. 29 nov. 122012-11-29 17:56:23


17

Có thể là bạn đã chèn các bảng vào một lược đồ không có trong đường dẫn tìm kiếm của bạn hoặc mặc định, nghĩa là công khai và do đó các bảng sẽ không hiển thị bằng \ dt.Nếu bạn sử dụng một lược đồ được gọi là dữ liệu, bạn có thể sửa lỗi này bằng cách chạy,

alter database set search_path=data, public;

Thoát và nhập lại psql và bây giờ \ dt cũng sẽ hiển thị cho bạn các bảng trong dữ liệu lược đồ.

+1

Chà, một 'set search_path = data đơn giản, công khai;' cũng sẽ làm được điều đó :) 03 apr. 142014-04-03 14:57:26

  0

@dezso, điều đó có làm thay đổi vĩnh viễn không, hay chỉ trong phiên psql đó? 03 apr. 142014-04-03 17:40:36

  0

Err, tôi đã không rõ ràng.Nó được dự định thay vì chu kỳ đăng xuất-đăng nhập. 03 apr. 142014-04-03 18:12:37


24

Để có thêm thông tin về cơ sở dữ liệu và danh sách bảng, bạn có thể làm:

\l+ để liệt kê cơ sở dữ liệu

                                  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)

\d+ để liệt kê tất cả các bảng trong lược đồ search_path hiện tại trong cơ sở dữ liệu hiện tại.

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)