在管理PostgreSQL数据库服务器时,您可能要执行的最常见任务之一就是列出数据库及其表。
PostgreSQL附带了一个名为psql的交互式工具,允许您连接到服务器并对其运行查询。在使用psql时,还可以利用它的元命令。这些命令对于脚本编写和命令行管理非常有用。所有元命令都以非引号反斜杠开头,也称为反斜杠命令。
本教程解释如何使用psql在PostgreSQL服务器中显示数据库和表。
列出数据库
您可以使用该 psql 命令以任何系统用户身份连接到 PostgreSQL 服务器。根据服务器配置,用户可能需要输入其密码才能连接到 psql 终端。要以您当前登录的用户身份访问 psql 终端,只需键入即可 psql 。
安装 PostgreSQL 软件包后,将创建名为 “postgres” 的管理用户。默认情况下,此用户可以在没有密码的情况下连接到本地 PostgreSQL 服务器。
要以 “postgres” 用户身份访问终端 psql ,请运行:
代码语言:javascript复制sudo -u postgres psql
该 sudo 命令允许您以其他用户身份运行命令。
从 psql 终端执行 l 或 list meta-command 列出所有数据库:
代码语言:javascript复制l
输出将包括数据库的数量,每个数据库的名称,其所有者,编码和访问权限:
输出如下:
代码语言:javascript复制 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 如下所示的开关:
代码语言:javascript复制sudo -u postgres psql -c "l"
列出数据库的另一种方法是使用以下 SQL 语句:
代码语言:javascript复制SELECT datname FROM pg_database;
与l元命令不同,上面的查询将仅显示数据库的名称:
代码语言:javascript复制 datname
-----------
postgres
odoo
template1
template0
(4 rows)
列出表
要首先列出特定数据库的所有表,您需要使用 c 或者 connect meta-command 连接到它。您登录 psql 终端的用户必须能够连接到数据库。
例如,要连接到名为 “odoo” 的数据库,您应键入:
代码语言:javascript复制c odoo
切换数据库后,使用 dt 列出所有数据库表:
输出将包括表的数量,每个表的名称及其架构,类型和所有者:
代码语言:javascript复制 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)
如果数据库为空,则输出将如下所示:
代码语言:javascript复制No relations found.
要获取有关表大小的信息,请使用说明 dt 。
结论
您已经学习了如何使用该 psql 命令列出 PostgreSQL 数据库和表。