Loading...

文章背景图

PostgreSQL psql 命令大全

2026-05-29
0
- 字
- 分钟
|

一、连接与基础操作

操作 命令 说明
连接到数据库 psql -U 用户名 -d 数据库名 -h 主机地址 -p 端口号 使用 psql 客户端连接 PostgreSQL
查看当前连接信息 \conninfo 显示当前数据库连接详情
查看 PostgreSQL 版本 SELECT VERSION(); 返回数据库服务器版本
退出 psql \q 退出 psql 命令行工具

cover: 附件/Halo封面/database.jpg

二、数据库管理命令

操作 SQL 命令 说明
查看所有数据库 \l psql 元命令,列出所有数据库
创建数据库 CREATE DATABASE 数据库名 OWNER 所有者; 创建一个新数据库,可指定所有者
切换数据库 \c 数据库名 切换到指定的数据库
删除数据库 DROP DATABASE 数据库名; 永久删除数据库,谨慎操作
查看当前数据库 SELECT CURRENT_DATABASE(); 显示当前连接的数据库名
修改数据库 ALTER DATABASE 数据库名 RENAME TO 新名称; 重命名数据库
查看数据库大小 SELECT pg_database_size('数据库名'); 返回数据库占用的磁盘空间

cover: 附件/Halo封面/database.jpg

三、模式(Schema)管理命令

操作 SQL 命令 说明
查看所有模式 \dn psql 元命令,列出所有模式
创建模式 CREATE SCHEMA 模式名; 创建一个新模式
删除模式 DROP SCHEMA 模式名; 删除一个模式
级联删除模式 DROP SCHEMA 模式名 CASCADE; 强制删除模式及其下的所有对象

cover: 附件/Halo封面/database.jpg

四、数据表管理命令

4.1 查看表信息

操作 命令 说明
查看所有表 \dt 列出当前数据库中所有表
查看表结构 \d 表名 显示表的列、类型、约束等详细信息
查看表的详细信息 \dt+ 表名 显示包括注释、索引在内的更多信息
查看表的创建 SQL SELECT pg_get_serial_sequence('表名','列名'); 或使用 pg_dump -t 表名 查看表的定义语句

4.2 创建与删除表

操作 SQL 命令
创建表 CREATE TABLE 表名 (列名 数据类型 [约束], …);
删除表 DROP TABLE 表名;
条件删除表 DROP TABLE IF EXISTS 表名;

创建表示例:

CREATE TABLE employees (
    employee_id SERIAL PRIMARY KEY,          -- 自增主键
    first_name VARCHAR(50) NOT NULL,         -- 名字,非空
    last_name VARCHAR(50) NOT NULL,          -- 姓氏,非空
    email VARCHAR(100) UNIQUE NOT NULL,      -- 邮箱,唯一且非空
    phone VARCHAR(20),                       -- 电话,可选
    hire_date DATE NOT NULL,                 -- 入职日期
    salary NUMERIC(10,2) CHECK (salary > 0), -- 薪资,必须大于 0
    department_id INT
);

4.3 修改表结构

操作 SQL 命令
添加列 ALTER TABLE 表名 ADD COLUMN 列名 数据类型;
删除列 ALTER TABLE 表名 DROP COLUMN 列名;
修改列数据类型 ALTER TABLE 表名 ALTER COLUMN 列名 TYPE 新数据类型;
重命名列 ALTER TABLE 表名 RENAME COLUMN 旧列名 TO 新列名;
重命名表 ALTER TABLE 旧表名 RENAME TO 新表名;
添加约束 ALTER TABLE 表名 ADD CONSTRAINT 约束名 CHECK (条件);
删除约束 ALTER TABLE 表名 DROP CONSTRAINT 约束名;
清空表数据 TRUNCATE TABLE 表名;

cover: 附件/Halo封面/database.jpg

五、数据操作命令(DML)

5.1 插入数据

操作 SQL 命令
插入单行 INSERT INTO 表名 (列1, 列2, …) VALUES (值1, 值2, …);
插入多行 INSERT INTO 表名 (列1, 列2, …) VALUES (值1, 值2), (值3, 值4), …;
从查询结果插入 INSERT INTO 目标表 (列1, 列2) SELECT 列1, 列2 FROM 源表 WHERE 条件;
冲突时更新 INSERT INTO 表名 (列1, 列2) VALUES (值1, 值2) ON CONFLICT (冲突列) DO UPDATE SET 列1 = 新值;

5.2 查询数据

操作 SQL 命令
基本查询 SELECT 列1, 列2 FROM 表名 WHERE 条件;
查询所有列 SELECT * FROM 表名;
条件查询 SELECT * FROM 表名 WHERE 条件1 AND/OR 条件2;
排序查询 SELECT * FROM 表名 ORDER BY 列名 ASC/DESC;
分组查询 SELECT 列名, COUNT(*) FROM 表名 GROUP BY 列名;
分组后过滤 SELECT 列名, COUNT(*) FROM 表名 GROUP BY 列名 HAVING COUNT(*) > 值;
限制结果数量 SELECT * FROM 表名 LIMIT 数量 OFFSET 偏移量;
去重查询 SELECT DISTINCT 列名 FROM 表名;

5.3 更新与删除数据

操作 SQL 命令
更新数据 UPDATE 表名 SET 列1 = 值1, 列2 = 值2 WHERE 条件;
删除数据 DELETE FROM 表名 WHERE 条件;
从多表删除 DELETE FROM 表1 USING 表2 WHERE 表1.列 = 表2.列 AND 条件;
返回修改的行 UPDATE 表名 SET 列 = 值 WHERE 条件 RETURNING *;

cover: 附件/Halo封面/database.jpg

六、索引与约束管理命令

6.1 索引操作

操作 SQL 命令
查看索引 \di 或 SELECT * FROM pg_indexes WHERE tablename = '表名';
创建普通索引 CREATE INDEX 索引名 ON 表名 (列名);
创建唯一索引 CREATE UNIQUE INDEX 索引名 ON 表名 (列名);
创建复合索引 CREATE INDEX 索引名 ON 表名 (列1, 列2, …);
创建表达式索引 CREATE INDEX 索引名 ON 表名 (LOWER(列名));
创建部分索引 CREATE INDEX 索引名 ON 表名 (列名) WHERE 条件;
删除索引 DROP INDEX 索引名;
重建索引 REINDEX INDEX 索引名;

6.2 约束操作

约束类型 SQL 示例
主键 ALTER TABLE 表名 ADD PRIMARY KEY (列名);
外键 ALTER TABLE 表名 ADD FOREIGN KEY (列名) REFERENCES 父表(列名);
唯一约束 ALTER TABLE 表名 ADD UNIQUE (列名);
检查约束 ALTER TABLE 表名 ADD CHECK (列名 > 0);
非空约束 ALTER TABLE 表名 ALTER COLUMN 列名 SET NOT NULL;

cover: 附件/Halo封面/database.jpg

七、事务与并发控制命令

操作 SQL 命令 说明
开始事务 BEGIN; 或 START TRANSACTION; 开启一个新事务
提交事务 COMMIT; 提交当前事务,永久保存修改
回滚事务 ROLLBACK; 回滚当前事务,撤销所有修改
设置保存点 SAVEPOINT 保存点名; 在事务中创建回滚点
回滚到保存点 ROLLBACK TO SAVEPOINT 保存点名; 回滚到指定保存点
释放保存点 RELEASE SAVEPOINT 保存点名; 删除保存点
查看当前事务隔离级别 SHOW TRANSACTION_ISOLATION; 返回当前会话的事务隔离级别
设置事务隔离级别 SET TRANSACTION ISOLATION LEVEL READ COMMITTED; 可选值:READ UNCOMMITTED, READ COMMITTED, REPEATABLE READ, SERIALIZABLE
锁定表 LOCK TABLE 表名 IN ACCESS EXCLUSIVE MODE; 对表加锁,用于显式控制并发

cover: 附件/Halo封面/database.jpg

八、用户与权限管理命令

8.1 用户/角色管理

操作 SQL 命令 说明
查看所有用户/角色 \du psql 元命令,列出所有角色及权限
创建用户(可登录) CREATE USER 用户名 WITH LOGIN PASSWORD '密码'; CREATE USER 是 CREATE ROLE … WITH LOGIN 的简写
创建角色(不可登录) CREATE ROLE 角色名; 创建普通角色,通常用作权限组
创建超级用户 CREATE ROLE super_admin WITH SUPERUSER LOGIN PASSWORD '密码'; 创建具有超级权限的用户
修改密码 ALTER ROLE 用户名 WITH PASSWORD '新密码'; 修改用户密码
允许/禁止登录 ALTER ROLE 用户名 WITH LOGIN/NOLOGIN; 控制用户是否可登录
授予超级用户权限 ALTER ROLE 用户名 WITH SUPERUSER; 提升用户为超级用户
允许创建数据库 ALTER ROLE 用户名 WITH CREATEDB; 授予创建数据库权限
删除用户 DROP ROLE 角色名; 删除角色,需先确保无依赖对象
强制删除用户 DROP ROLE IF EXISTS 角色名 CASCADE; 级联删除所有关联权限

8.2 权限授予与撤销

操作 SQL 命令 说明
授予表权限 GRANT SELECT, INSERT, UPDATE, DELETE ON 表名 TO 用户名; 授予用户对表的特定操作权限
授予所有权限 GRANT ALL ON 表名 TO 用户名; 授予用户对表的所有权限
授予数据库权限 GRANT CONNECT, CREATE ON DATABASE 数据库名 TO 用户名; 授予用户连接和创建模式的权限
授予模式权限 GRANT USAGE ON SCHEMA 模式名 TO 用户名; 授予用户使用模式的权限
授予函数权限 GRANT EXECUTE ON FUNCTION 函数名 TO 用户名; 授予用户执行函数的权限
撤销权限 REVOKE 权限 ON 对象 FROM 用户名; 撤销用户权限
授予 PUBLIC GRANT 权限 ON 对象 TO PUBLIC; 将权限授予所有用户
授予授予选项 GRANT 权限 ON 对象 TO 用户名 WITH GRANT OPTION; 允许用户将权限授予他人
查看用户权限 \du 或 SELECT * FROM information_schema.role_table_grants; 查看用户拥有的权限

cover: 附件/Halo封面/database.jpg

九、psql 元命令大全

psql 元命令以反斜杠 \ 开头,是 PostgreSQL 客户端提供的快捷命令。

9.1 信息查询类

命令 说明
\l 或 \list 列出所有数据库
\c 数据库名 切换到指定数据库
\dt 列出当前数据库中的所有表
\dt+ 列出所有表(含注释、大小等信息)
\d 表名 查看指定表的结构
\d+ 表名 查看表结构(含存储参数、注释)
\di 列出所有索引
\dn 列出所有模式
\df 列出所有函数
\dv 列出所有视图
\du 或 \dg 列出所有角色和用户
\conninfo 显示当前连接信息

9.2 格式控制类

命令 说明
\x 切换扩展显示模式(垂直显示,适合宽表)
\pset format unaligned 设置无对齐输出格式(适合导出数据)
\pset border 0|1|2 设置表格边框样式
\H 切换 HTML 输出格式

9.3 性能与统计类

命令 说明
\timing 切换 SQL 执行时间显示
\watch [秒数] 重复执行当前查询,用于监控

9.4 文件操作类

命令 说明
\i 文件名 执行指定 SQL 文件中的命令
\o 文件名 将查询结果重定向到文件
\copy 导入/导出数据(客户端侧)

9.5 其他实用命令

命令 说明
\e 打开编辑器编辑当前查询缓冲区
\! 命令 在 shell 中执行外部命令
\? 查看所有元命令的帮助
\h SQL命令 查看指定 SQL 命令的语法帮助

cover: 附件/Halo封面/database.jpg

十、数据类型速查

PostgreSQL 提供了丰富的内置数据类型。

10.1 数值类型

类型 别名 说明
SMALLINT int2 2 字节整数,范围 -32768 到 32767
INTEGER int, int4 4 字节整数,范围 -2³¹ 到 2³¹-1
BIGINT int8 8 字节整数,范围 -2⁶³ 到 2⁶³-1
DECIMAL(p,s) numeric 精确数字,可指定精度和小数位数
REAL float4 单精度浮点数,4 字节
DOUBLE PRECISION float8 双精度浮点数,8 字节
SERIAL serial4 自动增长的 4 字节整数
BIGSERIAL serial8 自动增长的 8 字节整数

10.2 字符串类型

类型 别名 说明
CHAR(n) character(n) 定长字符串,不足补空格
VARCHAR(n) character varying(n) 变长字符串,最大 n 字符
TEXT 无 变长字符串,无长度限制
BYTEA 无 二进制数据

10.3 日期/时间类型

类型 说明
DATE 日历日期(年、月、日)
TIME 一天中的时间(无时区)
TIMESTAMP 日期和时间(无时区)
TIMESTAMPTZ 日期和时间(含时区)
INTERVAL 时间段

10.4 其他常用类型

类型 说明
BOOLEAN 逻辑布尔值(真/假)
JSON 文本 JSON 数据
JSONB 二进制 JSON 数据,支持索引
UUID 通用唯一标识码
INET IPv4 或 IPv6 主机地址
CIDR IPv4 或 IPv6 网络地址
MACADDR MAC 地址

cover: 附件/Halo封面/database.jpg

十一、备份与恢复命令

11.1 pg_dump(单数据库备份)

操作 命令 说明
备份为 SQL 脚本 pg_dump -U 用户名 -d 数据库名 > backup.sql 导出为纯文本 SQL 脚本
备份为自定义格式 pg_dump -U 用户名 -d 数据库名 -Fc -f backup.dump 压缩的自定义格式,支持选择性恢复
仅备份结构 pg_dump -U 用户名 -d 数据库名 --schema-only 只导出表结构,不导出数据
仅备份数据 pg_dump -U 用户名 -d 数据库名 --data-only 只导出数据,不导出结构
备份指定表 pg_dump -U 用户名 -d 数据库名 -t 表名 > table_backup.sql 只备份特定表
包含清理命令 pg_dump -U 用户名 -d 数据库名 --clean 在创建前添加 DROP 命令
备份远程数据库 pg_dump -h 主机 -p 端口 -U 用户名 -d 数据库名 > backup.sql 从远程数据库导出

11.2 pg_dumpall(全集群备份)

操作 命令 说明
备份所有数据库 pg_dumpall -U 用户名 > all_backup.sql 备份整个 PostgreSQL 集群的所有数据库
仅备份全局对象 pg_dumpall -U 用户名 --globals-only > globals.sql 只备份角色和表空间等全局对象

11.3 恢复

操作 命令 说明
从 SQL 脚本恢复 psql -U 用户名 -d 数据库名 < backup.sql 执行 SQL 脚本恢复数据库
从自定义格式恢复 pg_restore -U 用户名 -d 数据库名 backup.dump 使用 pg_restore 恢复归档格式
选择性恢复 pg_restore -U 用户名 -d 数据库名 -t 表名 backup.dump 只恢复指定表
查看归档内容 pg_restore -l backup.dump 列出归档文件中的内容

cover: 附件/Halo封面/database.jpg

十二、性能分析与优化命令

12.1 执行计划分析

操作 命令 说明
查看执行计划 EXPLAIN SELECT …; 显示 SQL 语句的执行计划
实际执行并分析 EXPLAIN ANALYZE SELECT …; 实际执行并返回详细的执行统计信息
带缓冲区的分析 EXPLAIN (ANALYZE, BUFFERS) SELECT …; 显示缓冲区使用情况
详细输出 EXPLAIN (VERBOSE, ANALYZE) SELECT …; 输出更详细的执行信息

12.2 系统统计信息

操作 命令 说明
查看表统计信息 SELECT * FROM pg_stats WHERE tablename = '表名'; 查看表的数据分布统计
分析表(更新统计) ANALYZE 表名; 手动更新表的统计信息
查看表大小 SELECT pg_relation_size('表名'); 返回表占用的磁盘空间
查看表总大小 SELECT pg_total_relation_size('表名'); 返回表及索引的总大小
查看所有表大小 SELECT relname, pg_size_pretty(pg_relation_size(relid)) FROM pg_stat_user_tables ORDER BY pg_relation_size(relid) DESC; 按大小排序显示所有用户表

12.3 连接与活动监控

操作 命令 说明
查看当前活动连接 SELECT * FROM pg_stat_activity; 查看所有当前连接的会话信息
终止连接 SELECT pg_terminate_backend(pid); 终止指定 PID 的会话
查看锁信息 SELECT * FROM pg_locks; 查看当前持有的锁

12.4 参数配置

操作 命令 说明
查看当前配置 SHOW ALL; 显示所有配置参数
查看特定参数 SHOW shared_buffers; 查看指定参数的值
设置参数 SET work_mem = '16MB'; 临时设置当前会话的参数

cover: 附件/Halo封面/database.jpg

十三、常用函数速查

类别 函数示例 说明
字符串 LENGTH(), UPPER(), LOWER(), CONCAT(), SUBSTRING() 字符串处理
日期时间 NOW(), CURRENT_DATE, EXTRACT(), DATE_TRUNC() 日期时间处理
数学 ROUND(), FLOOR(), CEIL(), ABS() 数学计算
聚合 COUNT(), SUM(), AVG(), MAX(), MIN() 聚合统计
条件 CASE WHEN … END, COALESCE(), NULLIF() 条件判断
JSON jsonb_extract_path_text(), jsonb_array_elements() JSON 数据操作
窗口函数 ROW_NUMBER(), RANK(), DENSE_RANK(), LAG(), LEAD() 高级分析查询

cover: 附件/Halo封面/database.jpg

以上命令涵盖了 PostgreSQL 从基础到高级的绝大部分操作场景,可作为日常开发和运维的速查参考。如需特定模块的更详细说明,可以随时告知。

原创

PostgreSQL psql 命令大全

本文链接: PostgreSQL psql 命令大全

本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。

评论交流

文章目录