首页 / PostgreSQL 入门教程 / psql 命令行客户端入门

PostgreSQL 入门教程

psql 命令行客户端入门

本教程共 50 篇 · 第 3 篇 · 更新于 2026-07-31 · 约 7 分钟阅读

PostgreSQLPostgreSQL 入门教程psql命令行客户端数据库连接

3. psql 命令行客户端入门

本节目标:学完你能用 psql 连进数据库、执行一条 SQL、看懂几个最常用元命令,并会排查连不上的问题。

psql 是 Postgres 自带的命令行工具,几乎所有操作它都能干。图形界面虽好,但命令行才是真功夫。这一章带你入门。

psql 是什么

psql 不是数据库本身,而是连数据库的「客户端」。你敲的命令,通过网络或本地 socket 传给服务器,服务器算完把结果返回来,psql 负责把结果排好版显示给你。

它的好处是:不需要图形界面、能写脚本批量跑、远程服务器上随时可用。后面你会越来越离不开它。

连接到数据库

最基础的连接命令:

psql -U postgres
  • -U 指定用哪个数据库用户,这里是超级用户 postgres
  • 不写数据库名时,默认连和用户名同名的库。我们还没建自己的库,可以先连默认的 postgres 库。

更完整的连接写法,把主机、端口、库名都写上:

psql -h localhost -p 5432 -U postgres -d postgres

各参数含义:

  • -h:服务器地址,本机用 localhost
  • -p:端口,默认 5432
  • -U:用户名。
  • -d:要连的数据库名。
Tip

如果连的是本机,且当前系统用户正好叫 postgres,可以直接敲 psql 不带任何参数,它会用当前系统用户身份连同名库,最省事。

连上之后,你会看到这样的提示符:

postgres=#

postgres 是当前库名,# 表示你是超级用户。普通用户显示的是 =>。后面我们在书里都用 postgres=# 来表示你正站在 psql 里。

退出 psql

敲这个就能退出,回到系统命令行:

\q

也可以按 Ctrl + D(Linux/macOS)退出。Windows 上同样是 Ctrl + D\q

执行 SQL

在提示符后面直接写 SQL,结尾加分号,回车就执行。比如看版本:

SELECT version();

再比如做个简单计算:

SELECT 2 + 2;

还可以一次跑多条,用分号隔开:

SELECT 1 + 1;
SELECT now();
Tip

SQL 不区分大小写,但惯例是把关键字写成大写,自己定义的表名、列名用小写,看着清楚。另外,分号是「语句结束符」,漏写分号 psql 会一直等你继续输,出现 postgres-# 这样的续行提示,补个分号回车即可。

元命令(反斜杠命令)

psql 有一类以反斜杠 \ 开头的命令,它们不是 SQL,而是 psql 自己用的「快捷操作」,叫元命令(meta-command)。新手记住下面几个就够用了。

列出所有数据库:

\l

列出当前库的所有表:

\dt

查看某张表的结构:

\d users

查看所有元命令帮助:

\?

查看 SQL 命令的语法帮助, 比如想看 CREATE TABLE 怎么写:

\h CREATE TABLE
Note

元命令结尾不用写分号。一旦你打了 \,psql 就当它是指令,不会等你输分号。这是新手常踩的坑:在 \d 后面手滑加个分号,psql 会把它当普通文本报错。

更多好用的元命令

除了上面几个,下面这些也值得记住:

  • \dn:列出当前库的所有模式(schema)。
  • \df:列出函数。
  • \dv:列出视图。
  • \du:列出数据库角色(用户)。
  • \x:开启「横向展开」显示,宽表竖着看更清楚。
  • \timing:打开执行耗时统计,每条 SQL 跑多久一目了然。
  • \i 文件.sql:从文件里读取 SQL 并执行,做批量操作很方便。
  • \c 库名:切换当前连接的数据库(下一章细讲)。
Tip

觉得 \l\dt 输出太宽?先敲 \x 打开扩展模式,再执行,结果会一行一个字段竖着排,手机小屏也看得清。

一个完整示例

假设我们已经连上,看看库里有什么:

postgres=# \l
                                 List of databases
   Name    |  Owner   | Encoding | Collate | Ctype |   Access privileges
-----------+----------+----------+---------+-------+-----------------------
 postgres  | postgres | UTF8     | C       | C     |
 template0 | postgres | UTF8     | C       | C     |
 template1 | postgres | UTF8     | C       | C     |
(3 rows)

这里 template0template1 是系统自带的模板库,你先不用管,下一章建库时再聊。

用文件跑 SQL

如果你把一串 SQL 写进文件 init.sql,可以这样执行:

# 方式一:进 psql 后用 \i
postgres=# \i init.sql

# 方式二:命令行直接喂进去
psql -U postgres -d mydb -f init.sql

这招在批量建表、导数据时用得非常多。

常见连接错误

连不上是新手最常遇到的问题。我列几个典型报错和原因。

报错:command not found

psql: command not found

说明 psql 没装,或者没加进 PATH。Windows 用安装菜单里的 SQL Shell 打开,或把 bin 目录加进 PATH。

报错:服务器没启动

connection to server on socket "...5432" failed:
No such file or directory
        Is the server running locally and accepting connections?

这是服务没起来。回到上一章确认服务已启动。

报错:角色不存在

FATAL:  role "xxx" does not exist

你用的用户名在数据库里不存在。检查 -U 后面的名字,默认超级用户是 postgres

报错:密码错误

FATAL:  password authentication failed for user "postgres"

密码输错了。确认安装时设置的超级用户密码。

报错:连接被拒

FATAL:  no pg_hba.conf entry for host "..."

这是访问控制(pg_hba.conf)没放行这个来源。本机连一般不会有,远程连才容易碰上,后面讲权限章节再展开。

Warning

如果反复连不上,先看服务在不在跑,再看用户名和密码。八成问题出在这三样上,别急着重装。我之前就花一晚上排查,最后发现是服务根本没启动。

不进交互模式也能跑 SQL

不想进 psql 交互界面,也能直接执行一条 SQL:

psql -U postgres -d mydb -c "SELECT count(*) FROM users;"

-c 后面跟一条 SQL,执行完立刻退出。适合写进脚本里自动跑。要跑多条,用 -f 指定文件更方便(前面提过)。

历史命令与自动补全

psql 支持用上下方向键翻历史命令,这点对反复调试特别有用。连表名、列名也能补全:输入前几个字母按 Tab,psql 会列出匹配的对象名。

Tip

按两下 Tab 会列出所有可能的补全项。表很多时这个补全能省不少打字,也更不容易拼错表名。

调整输出格式

psql 的输出能用 \pset 调。几个常用的:

  • \pset border 2:给表格加完整边框,好看也好贴。
  • \pset format wrapped:宽行自动换行,不撑破屏幕。
  • \pset null '(null)':把空值显示成 (null),和空字符串区分开。

这些设置只在当前会话有效,退出就复位。想永久生效,把配置写进家目录的 .psqlrc 文件。

把查询结果存成文件

跑完查询想导出结果:

postgres=# \o result.txt
postgres=# SELECT * FROM users;
postgres=# \o

\o 文件 之后所有输出都写进文件,\o 不带参数关掉,恢复在屏幕显示。适合把报表结果留档。

当前连的是谁、连的哪

忘了自己身份?两条命令看清:

SELECT current_user;       -- 当前登录的数据库用户
SELECT current_database(); -- 当前所在的数据库
SELECT inet_server_port(); -- 当前连的端口
Note

多人协作或连了多个库时,这几条能帮你确认「我现在到底以谁的身份、在哪個库里操作」,避免改错地方。我之前就因为没确认,改到了测试库还以为改的是正式库。

下一章我们讲图形界面 pgAdmin,它和 psql 是互补的。