← 返回首页

学习使用PG经历之使用psql基本命令(1)

服务器运维 亲身经历 公开
内容简要
安装PG后,CMD下无法使用psql命令,原因是psql.exe不在环境变量path中,且默认用户名错误导致认证失败。
坑点
PG的psql.exe不在环境变量path中,导致无法找到;默认使用Windows当前登录用户名连接数据库,而数据库中不存在该用户。
注意事项

1. 将PG安装目录下的bin目录添加到环境变量path中。

  • 找到PG安装目录。
  • 找到bin目录。
  • 将bin目录路径添加到环境变量path中。

2. 使用正确的用户名连接数据库。

  • 使用默认超级用户postgres连接数据库。
  • 在cmd中执行:psql -U postgres。

3. 学习psql常用命令及操作。

  • 连接与切换数据库:\l, \c, \conninfo, \q。
  • 查看数据库对象结构:\dt, \dn, \du, \df, \d。
  • 查询历史与执行文件:\s, \i, \o。
  • 实用操作技巧:多行输入,Tab键自动补全,查看帮助。

4. 避免在多行输入状态下强行添加分号。

  • 使用\p查看当前缓冲区内容。
  • 使用 eset清空当前语句。
  • 使用\q退出。

5. 从PG命令状态退回PowerShell。

  • 输入\q退出psql。
  • 如果卡在多行输入状态,先输入 eset,再输入\q。

我在window上安装了PG,但是在CMD下虽无法使用命令psql

===================================================================

原因在于PG的psql.exe并不在windows的环境变量path中,因此无法找到,如果安装好后找不到psql就必须把psql.exe所在的目录加入windows的环境变量中

1、先找到PG安装在那里,然后找到bin目录,再把bin目录加入windows的环境变量path中

我的PG安装在:D:\\PostgreSQL\\17中,然后把D:\\PostgreSQL\\17\\bin加入环境变量。

image.png

2、然后打开PowerShell,执行psql命令

image.pngimage.png

2、在PowerShell中执行psql,为何默认为chen作为用户?事实上我本地PG数据库没有这个用户

==========================================================================

这是因为当你使用 psql 并且不指定用户名时,它会默认采用当前操作系统(Windows)的用户名来连接 PostgreSQL。

在你的电脑上,Windows 的当前登录用户名恰好是 chen。所以当你输入 psql 时,它实际执行的等价于 psql -U chen。

因为你的 PostgreSQL 数据库里没有创建名为 chen 的角色(用户),所以数据库无法识别这个用户,从而抛出了认证失败的错误。

解决方法:指定正确的用户名

你需要明确告诉 psql 使用哪个用户来连接。通常 PostgreSQL 安装后会创建一个默认的超级用户叫 postgres。

请在 cmd 中尝试使用以下命令连接:

psql -U postgres

执行后,系统会提示你输入密码,输入你安装 PostgreSQL 时设置的 postgres 用户密码即可。


为了让你以后用起来更顺手,需要我教你怎么配置一个不需要每次手动输入用户名的环境变量吗?

3、psql的一些常用命令及操作

========================================================================================

在 psql 中,命令主要分为两类:\\元命令(Meta-commands)\\和 标准 SQL 语句。

元命令是 psql 特有的快捷指令,通常以反斜杠 \ 开头,用于数据库管理、查看结构和配置环境,它们\\不以分号\\ ; 结尾。

以下是你日常使用 psql 必须掌握的常用命令:

一、 连接与切换数据库

  • \l 列出当前服务器上的所有数据库。
  • \c [数据库名] 切换到指定的数据库(例如:\c mytestdb)。
  • \conninfo 显示当前连接的详细信息(当前用户、当前数据库、服务器端口等)。
  • \q 退出 psql 交互界面。

二、 查看数据库对象结构(最常用)

  • \dt 列出当前数据库中的所有表。
  • \dt [模式名]. 列出指定模式下的所有表(例如:\dt public.)。
  • \dn 列出所有的模式(Schema)。
  • \du 列出所有的角色/用户及其权限。
  • \df 列出所有的函数。
  • \d [表名] 查看指定表的详细结构(字段类型、索引、默认值等,相当于 DBeaver 里的表结构视图)。
  • 例如:\d users

三、 查询历史与执行文件

  • \s 查看你本次 psql 会话中输入过的所有 SQL 历史记录。
  • \i [文件路径] 读取并执行一个本地 .sql 脚本文件。
  • 例如:\i C:\Users\chen\Desktop\init_data.sql
  • \o [文件路径] 将接下来的查询结果导出(重定向)到指定的文件中。
  • 例如:\o C:\Users\chen\Desktop\result.txt
  • 注意:想恢复在屏幕上显示结果,请输入不带参数的 \o。

四、 实用操作技巧

  1. 多行输入:如果你的 SQL 语句太长,换行时 psql 会提示你输入 ->。你只需写完语句,最后加上分号 ; 回车即可执行。
  2. Tab 键自动补全:在输入表名、字段名或元命令时,按 Tab 键,psql 会自动帮你补全,非常方便。
  3. 查看元命令帮助:在 psql 中输入 \? 可以查看所有可用的元命令帮助。
  4. 查看 SQL 语法帮助:在 psql 中输入 \h [SQL关键字](例如 \h SELECT)可以查看该标准 SQL 语句的语法说明。

你可以先试试在命令行输入 psql -U postgres 连进去,然后敲一下 \dt 或 \dn 看看效果。需要我教你如何用 psql 快速导出一个表的测试数据吗?

pitlog-# select * from test;

错误:  语法错误 在 "/" 或附近的

第1行select * from /
                   ^
pitlog=# select * from test;

 id |  name

----+--------

  1 | 颜欢

  2 | 周卉

4、两次执行为何第一次出错第二次正常了?

========================================================================

造成两次结果不一样的根本原因,是因为你的命令提示符不一样了。你第一次执行时,其实并不在 pitlog=# 状态下,而是在 pitlog-# 状态下。

注意看:

  • 第一次:提示符是 pitlog-#
  • 第二次:提示符是 pitlog=#

为什么会出现 pitlog-#?

在 psql 中:

  • =# 表示 psql 正在等待你输入一条新的完整 SQL 语句。
  • -# 表示上一条 SQL 语句没有写完,处于“多行输入”状态,它正在等你补全。

第一次失败的真相

第一次发生的情况是这样的:

  1. 你输入完 select * from test 后,可能不小心按了一下 Enter(回车),但忘记加分号 ;。
  2. 这时 psql 以为你还没写完,于是换行并显示 pitlog-# 提示符,等你继续写。
  3. 接着你又输入了 select * from test;。
  4. psql 把这两行连在一起,认为你写的是: select from test select from test;
  5. 这在 SQL 语法上是完全错误的,所以报错。至于报错提示中出现的 /,可能是多行状态下控制台显示异常或剪贴板残留导致的。

总结

第二次之所以成功,是因为你输入的是 pitlog=# select * from test;,这是一条完整、独立的标准 SQL 语句。

💡 避坑指南

以后在 psql 中,如果不小心多按了回车进入了 pitlog-# 状态,或者 SQL 语句写乱了,千万不要强行在后面补分号。

你可以:

  1. 输入 \p 看看当前缓冲区里到底存了什么内容。
  2. 直接输入 \reset,清空当前多行缓存,让提示符变回 pitlog=#,然后重新写你的 SQL。
  3. 或者直接输入 \q 退出重来。

5、在PG命令状态怎么退回PowerShell?

====================================================================================

在 psql 交互界面里,输入:\\q

按回车,就会退出 PostgreSQL 命令行,回到 PowerShell。

如果你不小心卡在多行输入状态(提示符是 -#),可以先输入 \reset 清空当前语句,再输入 \q 退出。

本文内容仅代表作者个人观点、经历或转述,不代表任何官方立场,仅供参考,不构成任何专业建议。据此操作产生的风险由读者自行承担。
发布于 2026-10-06 09:27:06 ID: 11