Skip to content

数据库速查

本机有 psql。生产库操作前:先备份、再改;大表 DDL 走维护窗口。

Terminal window
psql "postgresql://用户:密码@主机:5432/库名"
psql -h 127.0.0.1 -U postgres -d mydb
想做什么 命令 / SQL
列库 \l
连某个库 \c 库名
列表面 \dt
描述表 \d 表名
列索引 \di
执行文件 \i path/to/file.sql
对齐好看 \x auto

SSH 隧道连远端:

Terminal window
ssh -L 5432:127.0.0.1:5432 user@server
psql -h 127.0.0.1 -U app -d app
-- 谁占用连接
SELECT pid, usename, state, query_start, left(query, 80)
FROM pg_stat_activity
WHERE datname = current_database()
ORDER BY query_start;
-- 杀会话(慎用)
SELECT pg_terminate_backend(pid);
-- 表大小
SELECT relname, pg_size_pretty(pg_total_relation_size(relid))
FROM pg_catalog.pg_statio_user_tables
ORDER BY pg_total_relation_size(relid) DESC
LIMIT 20;
想做什么 命令
逻辑备份单库 pg_dump -Fc -f app.dump appdb
纯 SQL 备份 pg_dump appdb > app.sql
恢复自定义格式 pg_restore -d appdb app.dump
恢复 SQL psql appdb < app.sql
只备份 schema pg_dump -s appdb
只备份数据 pg_dump -a appdb

恢复前确认连的是目标库,别冲掉生产。

  • 先 EXPLAIN (ANALYZE, BUFFERS),再加索引
  • 高频等值 / 外键列值得索引;低基数列慎加
  • 写多读少的表不要堆太多索引
  • VACUUM (VERBOSE, ANALYZE) 表; 在大量更新/删除后有用
想做什么 命令
连上 redis-cli / redis-cli -u redis://…
看键(小心 KEYS) SCAN 0 MATCH prefix:* COUNT 100
类型与 TTL TYPE key / TTL key
删 DEL key
信息 INFO memory

缓存原则:当缓存不是真相来源;要有过期与失效策略。