Skip to content
必知必会的 psql 命令 | PostgreSQL

必知必会的 psql 命令 | PostgreSQL

PostgreSQL,简称 Postgres,是一种使用 SQL 语言的面向对象的关系数据库管理系统。它免费、开源、可靠,并且具备强大且高效的性能。PostgreSQL 也是最受欢迎和广泛使用的关系数据库之一。

psql 是一个命令行工具,允许您通过终端与 Postgres 数据库交互。使用它,您可以连接数据库、添加、读取和修改数据,查看数据库和字段,或从文件运行命令等等。

如果您想学习 Postgres 命令或需要温习,那么您来对地方了!本文将为您介绍在使用 PostgreSQL 时最重要的 psql 命令和选项。

psql

1. 连接数据库 psql -d

The first step is to learn how to connect to the database. There are two ways to connect, depending on where the database is located.

同一主机数据库

如果数据库与您的机器在同一台主机上,您可以使用以下命令进行连接:

psql -d <db-name> -U <username> -W

// example
psql -d ali_test_demo -U admin -W

上述命令包含三个参数:

  • -d 用于指定要连接的数据库名称
  • -U 用于指定要使用的用户名
  • -W 用于在连接数据库前强制 psql 提示输入密码

在这个示例中,命令将连接到 admin 用户下的 ali_test_demo 数据库。

不同主机数据库

如果您的数据库托管在其他地方,您可以按如下方式连接:

psql -h <db-address> -d <db-name> -U <username> -W

//example
psql -h localhost -d ali_test_demo -U admin -W

-h标志指定数据库的主机地址。

SSL 模式

在某些情况下,您可能希望使用 SSL 进行连接。

psql "sslmode=require host=<db-address> dbname=<db-name> user=<username>"
 
//example
psql "sslmode=require host=my-psql-db.cloud.tech dbname=ali_test_demo user=admin"

上面的命令打开到指定数据库的 SSL 连接。

2. 列出所有数据库- \l

在很多情况下,您可能会处理多个数据库。您可以使用以下命令来查看所有可用的数据库:

postgres=# \l
                             List of databases
   Name        |  Owner  | Encoding |   Collate   |    Ctype    |   Access privileges   |  Size   | Tablespace 
   ------------+---------+----------+-------------+-------------+-----------------------+---------+-------------
 customer_data | dbadmin | UTF8     | en_US.UTF-8 | en_US.UTF-8 |                       | 512 MB  | pg_default
 employees     | dbadmin | UTF8     | en_US.UTF-8 | en_US.UTF-8 |                       | 300 MB  | pg_default
 inventory     | dbadmin | UTF8     | en_US.UTF-8 | en_US.UTF-8 |                       | 1 GB    | pg_default
 template0     | postgres| UTF8     | en_US.UTF-8 | en_US.UTF-8 | =c/postgres          +| 3276 kB | pg_default
 template1     | postgres| UTF8     | en_US.UTF-8 | en_US.UTF-8 | =c/postgres          +| 3276 kB | pg_default
(5 rows)

以上说明了运行该命令时会发生什么。您将获得一个包含所有数据库及其名称、所有者、访问权限和其他信息的表。

3. 切换到另一个数据库- \c

您还可以使用以下命令切换到另一个数据库:

\c <db-name>

// example
\c sy_test_db

比如:

postgres=# \c sy_test_db
You are now connected to database "sy_test_db" as user "postgres"
sy_test_db=# 

该命令切换到您之前登录的用户下的指定数据库。

4. 列出数据库表 - \dt

让我们考虑一下您想要查看数据库中的所有表。您可以列出所有数据库表,如下所示:

sy_test_db=# \dt
            List of relations
Schema |       Name        | Type  | Owner
-------+-------------------+-------+-------
public  |     users        | table | postgres
public  |     orders       | table | postgres
public  |     products     | table | postgres
(3 rows)

\dt psql 命令会返回表的以下信息:

  • 表所属的模式
  • 表的类型
  • 表的所有者

5. 描述一个表 - \d

psql 还有一个命令可以让您查看表的结构。

\d <table-name>
 
// example
\d ali_test_db

\d 命令会返回表的所有列、列的数据类型、索引、是否允许为空,以及配置的默认值。

如果您想获取更多关于某个表的信息,可以使用以下命令:

\d+ <table-name>
ali_test_db=# \d+ employees
                    Table "public.employees"
Column   |      Type             | Collation | Nullable | Default | Storage  | Stats target | Description 
---------+-----------------------+-----------+----------+---------+----------+--------------+--------------
id       |       integer         |           | not null | nextval('employees_id_seq'::regclass) | plain |
name     | character varying(50) |           |          | extended | 
age      |       smallint        |           |          | plain    | 
email    | character varying(100)|           | not null | extended | 
position | character varying(50) |           |          | extended | 
salary   |    numeric(10,2)      |           |          | main     | 

Indexes:
    "employees_pkey" PRIMARY KEY, btree (id)

Access method: heap

现在,您可以获得额外的信息,例如存储、压缩、统计目标和描述。

6. 列出所有模式 - \dn

\dn psql 命令列出所有数据库模式。它返回模式的名称及其所有者。

\dn

7. 列出用户及其角色 - \du

有时,您可能需要更改用户。 Postgres 有一个命令可以列出所有用户及其角色。

postgres=# \du
Role name        | Attributes | Member of
-----------------+------------+----------
postgres         | Superuser, Create role, Create DB, Replication, Bypass RLS | {}
ali_demo1        |     {}     | {}

8. 检索特定用户 - \du

您还可以使用以下命令检索有关特定用户的信息:

\du <username>

//example
/du postgres

现在,您可以查看指定用户的角色,以及该用户是否是组的成员。

ali_test_db=# /du postgres
Role name | Attributes | Member of
----------+------------+----------
postgres | Superuser, Create role, Create DB, Replication, Bypass RLS | {}

9. 列出所有函数 - \df

您可以使用 \df 命令列出数据库中的所有函数,该命令将返回以下信息:

  • 函数所属的模式
  • 函数的名称
  • 函数返回的结果数据类型
  • 函数的参数数据类型
  • 函数的类型

这样做可以帮助您查看数据库中定义的所有函数及其详细信息。

10. 列出所有视图 - \dv

psql 界面使您能够使用 \dv 命令列出所有数据库视图。

11. 将查询结果保存到文件 - \o

在某些情况下,您可能希望稍后对查询结果进行分析,或者比较两个查询的结果。psql 接口允许实现这一点。您可以通过以下方式将查询结果保存到文件中:

\o <file-name>
// example
\o query_results
...run the psql commands...
\o - stop the process and output the results to the terminal again

让我们将以下查询结果保存到文件中:

  • 可用的数据库表
  • 描述数据库表的结果
  • 所有用户的列表
  • 用户 “postgres” 的详细信息

psql

注意:要停止将结果保存到文件中,您需要再次运行\o命令(不带文件名)。

12. 从文件运行命令 - \i

您也可以从文件中执行命令。虽然对于简单的命令,这种方法可能并不是最佳选择,但当您需要运行多个命令或复杂的 SQL 语句时,它会非常有用。 请创建一个 txt 文件,内容如下:

\l
\dt
\du

运行该文件时,它应该返回以下内容的列表:

  • 数据库
  • 数据库表
  • 用户

您可以使用以下 psql 命令从文件中执行这些命令:

\i <file-name>

// example
\i psql_commands.txt

psql

该命令按预期返回所有数据库、表和用户。

13. 退出 psql - \q

您可以使用\q命令退出psql界面。

总结

psql 接口功能强大,提供了丰富的功能,使您能够执行多种操作,包括运行 SQL 语句、管理数据库、查询数据等。通过 psql,您可以方便地连接到 PostgreSQL 数据库,创建和修改表,插入和更新数据,以及执行复杂的查询。

如果您希望开始使用 PostgreSQL 或者希望加深对其功能的理解,建议您访问 PostgreSQL 的官方网站 (opens in a new tab)。在网站上,您可以找到详细的文档、教程和示例,帮助您更好地掌握 PostgreSQL 的使用。

开始体验 Chat2DB Pro

如果你正在寻找一款强大、基于 AI 的数据库管理工具,快来试试 Chat2DB 吧!无论你是数据库管理员、开发者还是数据分析师,Chat2DB 都能通过 AI 的强大功能简化你的工作。

👉现在享受 Chat2DB Pro 30 天免费试用 (opens in a new tab),即刻体验所有高级功能。