如何使用psql列出PostgreSQL数据库和表

时间:2020-03-05 15:24:53  来源:igfitidea点击:

在管理PostgreSQL数据库服务器时,我们可能要执行的最常见任务之一就是列出数据库及其表。

PostgreSQL带有一个称为'psql'的交互式工具,它使我们可以连接到服务器并对其进行查询。
使用“ psql”时,我们还可以利用其元命令。
这些命令对于脚本和命令行管理很有用。
所有元命令都以无引号的反斜杠开头,也称为反斜杠命令。

本教程说明了如何使用'psql'在PostgreSQL服务器中显示数据库和表。

列出数据库

我们可以以任何系统用户的身份使用'psql'命令连接到PostgreSQL服务器。
根据服务器配置,用户可能需要输入密码才能连接到“ psql”终端。
要以我们当前登录的用户身份访问“ psql”终端,只需键入“ psql”。

安装PostgreSQL软件包后,将创建一个名为“ postgres”的管理用户。
默认情况下,该用户无需密码即可连接到本地PostgreSQL服务器。

要以“ postgres”用户身份访问“ psql”终端,请运行:

sudo -u postgres psql

“ sudo”命令允许我们以其他用户身份运行命令。

在psql终端中执行'\ l'或者'\ list'元命令以列出所有数据库:

\l

输出将包括数据库数量,每个数据库的名称,其所有者,编码和访问特权:

List of databases
   Name    |  Owner   | Encoding | Collate |  Ctype  |   Access privileges   
-----------+----------+----------+---------+---------+----------------------
 odoo      | odoo     | UTF8     | C       | C.UTF-8 | 
 postgres  | postgres | UTF8     | C.UTF-8 | C.UTF-8 | 
 template0 | postgres | UTF8     | C.UTF-8 | C.UTF-8 | =c/postgres          +
           |          |          |         |         | postgres=CTc/postgres
 template1 | postgres | UTF8     | C.UTF-8 | C.UTF-8 | =c/postgres          +
           |          |          |         |         | postgres=CTc/postgres
(4 rows)

PostgreSQL服务器具有默认创建的三个数据库,即template0,template1和postgres。
前两个是创建新数据库时使用的模板。

如果要获取有关数据库大小的信息,则默认表空间和描述使用'\ l +'或者'\ list +'。
仅当当前用户可以连接时,才会显示数据库大小。

要获取所有数据库的列表而不访问psql shell,请使用'-c'开关,如下所示:

sudo -u postgres psql -c "\l"

列出数据库的另一种方法是使用以下SQL语句:

SELECT datname FROM pg_database;

与'\ l'元命令不同,上面的查询将仅显示数据库名称:

datname  
----------
 postgres
 odoo
 template1
 template0
(4 rows)

列表表

要首先列出特定数据库的所有表,我们需要使用'\ c'或者'\ connect'元命令连接到该数据库。
使用psql终端登录的用户必须能够连接到数据库。

例如,要连接到名为“ odoo”的数据库,我们可以输入:

\c odoo

切换数据库后,使用'\ dt'元命令列出所有数据库表:

输出将包括表的数量,每个表的名称及其模式,类型和所有者:

List of relations
 Schema |                        Name                         | Type  | Owner 
--------+-----------------------------------------------------+-------+------
 public | base_import_import                                  | table | odoo
 public | base_import_mapping                                 | table | odoo
 public | base_import_tests_models_char                       | table | odoo
 ...
 public | web_editor_converter_test_sub                       | table | odoo
 public | web_tour_tour                                       | table | odoo
 public | wizard_ir_model_menu_create                         | table | odoo
(107 rows)

如果数据库为空,则输出将如下所示:

No relations found.

要获取有关表大小和描述的信息,请使用'\ dt +'。