在psql中查找数据需用SELECT语句,查找对象可用\d等元命令,结合SQL查询与\dt、\dy等命令可高效检索数据库信息。
查找数据库内容(表/视图中的数据)
基础查询
SELECT * FROM 表名 WHERE 字段 LIKE '%关键词%';
- 示例:查找
users
表中name
包含”john”的记录SELECT * FROM users WHERE name LIKE '%john%';
- 不区分大小写:用
ILIKE
替代LIKE
SELECT * FROM users WHERE name ILIKE '%john%';
正则表达式匹配
SELECT * FROM 表名 WHERE 字段 ~ '正则表达式';
- 示例:查找以”j”开头、”n”结尾的姓名
SELECT * FROM users WHERE name ~ '^j.*n$';
分页查找
SELECT * FROM 表名 LIMIT 10 OFFSET 0; -- 前10条 SELECT * FROM 表名 LIMIT 10 OFFSET 10; -- 第11-20条
查找数据库对象(表/索引/函数等)
列出所有对象(元命令)
命令 | 作用 |
---|---|
\dt |
列出所有表 |
\dv |
列出所有视图 |
\di |
列出所有索引 |
\df |
列出所有函数 |
\dn |
列出所有模式 |
按名称模糊查找
-- 查找表名包含"log"的表 SELECT tablename FROM pg_tables WHERE tablename LIKE '%log%'; -- 查找函数名包含"date"的函数 SELECT proname FROM pg_proc WHERE proname LIKE '%date%';
查找SQL执行历史
- 查看历史命令
按/键浏览历史记录,或输入\s
查看完整历史。 - 保存历史到文件
\s /path/to/save_history.sql
查找表结构
-- 查看表结构 \d 表名 -- 示例:查看users表的结构 \d users
输出包含字段名、类型、索引等详细信息。
高级技巧
-
快速定位大表
按行数排序查找大表:SELECT relname AS table_name, n_live_tup AS row_count FROM pg_stat_user_tables ORDER BY n_live_tup DESC;
-
查找锁阻塞进程
SELECT * FROM pg_locks WHERE granted = false;
-
全文搜索
对文本字段启用全文索引:CREATE INDEX idx_fts ON 表名 USING GIN (to_tsvector('english', 文本字段)); SELECT * FROM 表名 WHERE to_tsvector('english', 文本字段) @@ to_tsquery('关键词');
注意事项
- 权限问题
确保用户有SELECT
权限:GRANT SELECT ON 表名 TO 用户名;
- 性能优化
- 对常搜索的字段添加索引:
CREATE INDEX idx_name ON users (name);
- 避免
SELECT *
,明确指定字段。
- 对常搜索的字段添加索引:
- 通配符说明
- :匹配任意字符(含空字符)
_
:匹配单个字符
引用说明
- PostgreSQL官方文档:Pattern Matching
psql
元命令参考:psql Meta-Commands- 锁监控:pg_locks视图
通过以上方法,可高效利用psql
终端进行数据检索和系统分析,建议结合业务场景选择合适的查询策略,并定期优化索引以提升效率。
原创文章,发布者:酷番叔,转转请注明出处:https://cloud.kd.cn/ask/5458.html