如何使用psql列出所有数据库和表?


935

我正在尝试学习PostgreSQL管理,并已开始学习如何使用psql命令行工具。

当我使用psql --username=postgres登录时,如何列出所有数据库和表?

我曾尝试\dddS+ ,但没有列出。我用pgAdmin III创建了两个数据库和几个表,所以我知道它们应该被列出来。

1,226

请注意以下命令:

  • \list\l :列出所有数据库
  • \dt :列出当前数据库中的所有表

您永远不会在其他数据库中看到表,这些表不可见。您必须连接到正确的数据库才能查看其表(以及其他对象)。

要切换数据库:

\connect database_name

请参阅手册关于psql

+115

您可以使用'''\ c db_name'''连接到某个数据库。 17 2月. 132013-02-17 08:57:50

+8

'\ dt'似乎没有列出当前数据库中的所有表(它似乎排除了至少在9.2中找不到'search_path'的那些表) 06 8月. 132013-08-06 19:42:24

+16

'\ dt * .'将列出所有模式中的所有表,而无需修改搜索路径。 24 3月. 152015-03-24 16:10:34

+14

\ l +是我最喜欢的 - 它也显示了磁盘使用情况。 21 5月. 152015-05-21 05:57:42

  0

在Windows上,我可以使用此命令“psql -U username -l”列出数据库,但它不适用于斜杠版本。 06 10月. 152015-10-06 15:37:48

  0

我正在寻找这种类型的命令'psql -c“\ l”template1',我可以从命令行运行它。 26 5月. 172017-05-26 19:45:51

  0

值得注意的是(截至9.6):在search_path中有2个以上的模式,并且在不同的模式中存在相同的表名,\ dt将根据search_path中的顺序仅返回具有相同名称的第一个表。我发现这很奇怪。 17 10月. 172017-10-17 16:25:29


64

\l也是简写\list。有很多斜杠命令,您可以使用它们在psql中列出\?


256

这列出了数据库:

SELECT datname FROM pg_database
WHERE datistemplate = false;

这将列出当前数据库中的表

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

你是对的,但问题是关于psql工具的元命令。\ dt比输入任何查询容易得多。 18 2月. 112011-02-18 07:50:28

+11

我认为这是一个很好的答案,因为它可以从Linux命令行执行,而不是需要在psql解释器中,有时候我会使用ExtraPutty挂起。 16 5月. 152015-05-16 17:51:18

+1

也救了我的一天。对于我的特殊情况,我正在添加'WHERE table_schema ='public',因为我想删除自定义表。 28 9月. 152015-09-28 15:31:58

+18

如果使用-E标志启动psql,则在使用元命令时将显示实际查询。 13 1月. 162016-01-13 09:03:31

  0

这是一个很好的答案。虽然OP想要元命令,但我是谷歌搜索,这引出了我这个问题。 03 8月. 172017-08-03 00:40:17


88

在Postgresql中,这些终端命令列出了可用的数据库

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

或者命令更简单地说:

psql -U pgadmin -l

这些命令在终端上打印:

         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)

这些是可用的数据库。

在PSQL中,这些命令列出了可用的表

必须先指定数据库,然后才能列出该数据库中的表。

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

这会带你到一个psql终端:

kurz_prod=#

使用命令\d表示显示所有表,视图和序列

kurz_prod=# \d

这打印:

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

然后,要退出psql终端,请键入\q并按Enter键。或Ctrl-D做同样的事情。这些是该数据库中的表。

+4

\ d不只是列出表:'\ d [S +]列表表,视图和序列' 06 8月. 132013-08-06 19:43:18

+2

对我来说,这是“正确”的答案,因为它不要求您已经连接到现有数据库。 14 3月. 172017-03-14 15:11:47


25

从pg_Admin,您可以在当前数据库上运行以下命令,它将获取指定模式的所有表:

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

这将为您提供所有永久表(通常是您正在寻找的表)的列表。如果你改变了你可以得到的只是表名*通配符只是table_name 。公共table_schema是大多数数据库的默认架构,除非您的管理员已设置新架构。

+3

虽然这是事实,但这解决了与OP有关的不同客户。 29 11月. 122012-11-29 17:56:23


17

您可能已将表插入到不在搜索路径中的模式中,或者是默认的,即public,因此表将不会使用\ dt显示。如果您使用名为data的架构,则可以通过运行来修复此问题,

alter database set search_path=data, public;

退出并重新输入psql,现在\ dt也会显示模式数据中的表。

+1

好吧,一个简单的'set search_path = data,public;'也可以做到这一点:) 03 4月. 142014-04-03 14:57:26

  0

@dezso,这会永久地进行更改,还是仅仅在psql会话中? 03 4月. 142014-04-03 17:40:36

  0

呃,我不太清楚。它的目的是代替注销登录周期。 03 4月. 142014-04-03 18:12:37


24

要获得有关数据库和表列表的更多信息,您可以执行以下操作:

\l+列出数据库

                                  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+列出当前数据库中当前search_path架构中的所有表。

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)