用途
本技能面向 PostgreSQL 数据库的日常使用与运维,提供从命令行连接到查询编写、索引设计、权限管理、备份恢复、性能诊断和故障排查的参考命令与代码示例。当用户提到 postgres、psql、postgresql、database queries、sql 等关键词时适用。
主要能力
psql 命令行基础
提供连接数据库的两种方式(参数式与连接字符串式),以及常用元命令:\l 列出数据库、\c 切换数据库、\dt 列出表、\d 描述表结构、\di 列出索引、\df 列出函数、\du 列出角色、\x 切换展开输出、\timing 切换计时、\e 编辑上一条查询、\i 执行文件、\copy 导出 CSV。
常用查询
覆盖 CRUD(INSERT/UPDATE/DELETE 带 RETURNING、SELECT 带 WHERE/ORDER BY/LIMIT)、内连接与左连接(含 COALESCE 处理缺失数据)、子查询、CTE(WITH 子句,含 LAG 窗口函数计算环比)、窗口函数(ROW_NUMBER、SUM OVER、RANK)。
索引
介绍 B-tree(默认,含复合索引与唯一索引)、部分索引(WHERE 条件)、GIN(数组、JSONB、全文检索)、GiST(几何、范围、邻近查询)的创建方式,并说明复合索引列顺序对查询匹配的影响。
EXPLAIN ANALYZE
给出带 ANALYZE、BUFFERS、FORMAT TEXT 的执行计划命令,并列出需要关注的关键信号:大表 Seq Scan(缺索引)、高行数 Nested Loop、高 Buffers: shared read(数据未缓存)、Rows Removed by Filter 远大于实际行数(索引选择性不足)。
JSON/JSONB 操作
包含建表存储 JSONB、插入数据、提取文本值(->>)、嵌套访问(-> 与 ->> 组合)、包含运算符 @>、键存在判断 ?、JSONB 内数组查询、按 JSONB 值聚合,以及 GIN 索引(jsonb_path_ops)和基于提取值的 B-tree 索引。
管理
角色与权限:创建只读/读写角色、授予 schema 与表权限、ALTER DEFAULT PRIVILEGES 使权限对未来表生效、REVOKE 回收权限。备份与恢复:pg_dump 自定义格式、指定表、仅结构/仅数据,pg_restore 恢复,pg_dumpall 全库导出。VACUUM:手动 VACUUM、VACUUM ANALYZE、VACUUM FULL(重写表、需排他锁、慎用),以及查询 autovacuum 统计。
性能
启用 pg_stat_statements 并按总耗时列出 Top 10 查询;查询当前运行中的查询、取消/终止长查询(pg_cancel_backend / pg_terminate_backend);检测锁竞争(通过 pg_locks 与 pg_stat_activity 关联查询被阻塞与阻塞方)。
连接池
提供 PgBouncer 最小配置示例(databases、pgbouncer 段,含 pool_mode、max_client_conn、default_pool_size 等),并说明 session、transaction、statement 三种池模式的区别。
常见问题
空闲事务:查找 idle in transaction 连接并设置 idle_in_transaction_session_timeout。表膨胀:估算死元组比例,按表调整 autovacuum 参数。锁竞争:说明常见成因,给出安全加列(分批回填后设默认值)与 CREATE INDEX CONCURRENTLY 的安全 DDL 模式。
使用方式
资料以命令与 SQL 代码示例形式组织,可直接复制到 psql 或脚本中执行。使用时需根据实际主机、端口、用户名、数据库名和表结构替换示例中的占位值。
适用场景
编写或调试 PostgreSQL 查询、设计索引、分析执行计划、处理 JSONB 数据、管理角色权限、执行备份恢复、诊断慢查询与锁问题、配置 PgBouncer 连接池、处理空闲事务与表膨胀等。
限制
资料未提供具体版本兼容性说明、安装步骤、收费或授权信息,也未提供各命令在不同环境下的性能基准。部分命令(如 VACUUM FULL、CREATE INDEX CONCURRENTLY)带有锁或耗时影响,资料中已作提示,实际使用需结合业务评估。