PostgreSQL 备忘¶
连接¶
127.0.0.1 走 TCP 需要 pg_hba.conf 允许;localhost 在部分系统会走 Unix socket,两者表现不同,排错时注意区分。
备份与恢复¶
# 备份(自定义格式,可并行、可选择性恢复)
pg_dump -Fc -U user -d dbname -f dbname-$(date +%F).dump
# 恢复
pg_restore -d dbname --clean --if-exists dbname-2026-01-01.dump
# 只导表结构
pg_dump -s -U user -d dbname > schema.sql
查看连接数与占用¶
SELECT pid, usename, state, wait_event_type, left(query, 60) AS q
FROM pg_stat_activity ORDER BY query_start;
-- 终止某个会话
SELECT pg_terminate_backend(12345);
慢查询¶
-- 先开扩展
CREATE EXTENSION IF NOT EXISTS pg_stat_statements;
SELECT calls, round(total_exec_time::numeric, 1) AS total_ms,
round(mean_exec_time::numeric, 1) AS mean_ms,
left(query, 80) AS query
FROM pg_stat_statements
ORDER BY total_exec_time DESC
LIMIT 20;
索引是否被用上¶
看 Seq Scan 出现在大表上通常说明索引缺失或条件写法导致索引失效(比如对列做了函数运算)。