PostgreSQL 常用查询命令汇总

PostgreSQL 常用查询命令汇总

一、数据库信息查询

1.1 查看数据库列表

sql 复制代码
-- 查看所有数据库
\l
-- 或
SELECT datname FROM pg_database;

-- 查看当前数据库
SELECT current_database();

1.2 查看数据库大小

sql 复制代码
-- 查看当前数据库大小
SELECT pg_size_pretty(pg_database_size(current_database()));

-- 查看所有数据库大小
SELECT datname, pg_size_pretty(pg_database_size(datname)) 
FROM pg_database 
ORDER BY pg_database_size(datname) DESC;

-- 查看具体数据库大小
SELECT pg_size_pretty(pg_database_size('数据库名'));

二、表信息查询

2.1 查看所有表

sql 复制代码
-- 查看当前schema中的所有表
\dt

-- 查看所有schema中的表
\dt *

-- 查看指定schema中的表
\dt schema_name.*

-- 使用SQL查询
SELECT schemaname, tablename 
FROM pg_tables 
WHERE schemaname NOT IN ('information_schema', 'pg_catalog');

2.2 查看表结构

sql 复制代码
-- 查看表结构
\d 表名

-- 查看表详细信息(包括索引、触发器、约束等)
\d+ 表名

-- 使用SQL查询列信息
SELECT 
    column_name, 
    data_type, 
    character_maximum_length,
    is_nullable,
    column_default
FROM information_schema.columns 
WHERE table_name = '表名';

2.3 查看表大小

sql 复制代码
-- 查看表大小(不含索引)
SELECT pg_size_pretty(pg_relation_size('表名'));

-- 查看表大小(含索引和TOAST)
SELECT pg_size_pretty(pg_total_relation_size('表名'));

-- 查看所有表大小排序
SELECT 
    relname as table_name,
    pg_size_pretty(pg_total_relation_size(relid)) as total_size,
    pg_size_pretty(pg_relation_size(relid)) as data_size,
    pg_size_pretty(pg_total_relation_size(relid) - pg_relation_size(relid)) as index_size
FROM pg_catalog.pg_statio_user_tables 
ORDER BY pg_total_relation_size(relid) DESC;

三、索引信息查询

3.1 查看索引

sql 复制代码
-- 查看表的索引
\d 表名

-- 查看所有索引
SELECT 
    schemaname,
    tablename,
    indexname,
    indexdef
FROM pg_indexes 
WHERE schemaname = 'public'
ORDER BY tablename, indexname;

-- 查看指定表的索引
SELECT 
    indexname,
    indexdef
FROM pg_indexes 
WHERE tablename = '表名';

3.2 索引使用情况

sql 复制代码
-- 查看索引使用统计
SELECT 
    schemaname,
    tablename,
    indexname,
    idx_scan as 索引扫描次数,
    idx_tup_read as 读取元组数,
    idx_tup_fetch as 获取元组数
FROM pg_stat_user_indexes 
ORDER BY idx_scan DESC;

四、连接和会话信息

4.1 查看当前连接

sql 复制代码
-- 查看当前连接数
SELECT count(*) FROM pg_stat_activity;

-- 查看详细连接信息
SELECT 
    pid,
    usename as user,
    datname as database,
    client_addr as client_ip,
    state,
    query_start,
    state_change,
    query
FROM pg_stat_activity 
WHERE state = 'active';

-- 查看最大连接数设置
SHOW max_connections;

4.2 终止连接

sql 复制代码
-- 终止指定进程
SELECT pg_terminate_backend(pid);

-- 终止空闲连接
SELECT pg_terminate_backend(pid) 
FROM pg_stat_activity 
WHERE state = 'idle' 
AND state_change < current_timestamp - INTERVAL '10' MINUTE;

五、性能监控查询

5.1 慢查询监控

sql 复制代码
-- 查看当前正在运行的慢查询(执行超过5秒的)
SELECT 
    pid,
    usename,
    datname,
    query,
    now() - pg_stat_activity.query_start as duration,
    state
FROM pg_stat_activity 
WHERE (now() - pg_stat_activity.query_start) > interval '5 seconds'
AND state = 'active'
ORDER BY duration DESC;

-- 查看慢查询日志配置
SHOW log_min_duration_statement;

5.2 锁信息查询

sql 复制代码
-- 查看当前锁信息
SELECT 
    pid,
    locktype,
    relation::regclass as table_name,
    mode,
    granted,
    query
FROM pg_locks l
JOIN pg_stat_activity a ON l.pid = a.pid
WHERE NOT granted;

-- 查看被阻塞的查询
SELECT 
    blocked_locks.pid AS blocked_pid,
    blocked_activity.usename AS blocked_user,
    blocking_locks.pid AS blocking_pid,
    blocking_activity.usename AS blocking_user,
    blocked_activity.query AS blocked_statement
FROM pg_catalog.pg_locks blocked_locks
JOIN pg_catalog.pg_stat_activity blocked_activity ON blocked_locks.pid = blocked_activity.pid
JOIN pg_catalog.pg_locks blocking_locks 
    ON blocking_locks.locktype = blocked_locks.locktype
    AND blocking_locks.database = blocked_locks.database
    AND blocking_locks.relation = blocked_locks.relation
    AND blocking_locks.pid != blocked_locks.pid
JOIN pg_catalog.pg_stat_activity blocking_activity ON blocking_locks.pid = blocking_activity.pid
WHERE NOT blocked_locks.granted;

六、用户和权限查询

6.1 查看用户/角色

sql 复制代码
-- 查看所有用户
\du
-- 或
SELECT 
    rolname as role_name,
    rolsuper as superuser,
    rolcreatedb as create_db,
    rolcreaterole as create_role,
    rolcanlogin as can_login
FROM pg_roles;

-- 查看当前用户
SELECT current_user;

6.2 查看权限

sql 复制代码
-- 查看表的权限
SELECT 
    grantee,
    table_schema,
    table_name,
    privilege_type
FROM information_schema.role_table_grants 
WHERE table_name = '表名';

-- 查看用户的权限
SELECT 
    grantor,
    grantee,
    table_schema,
    table_name,
    privilege_type
FROM information_schema.role_table_grants 
WHERE grantee = '用户名';

七、配置参数查询

7.1 查看配置参数

sql 复制代码
-- 查看所有配置参数
SHOW ALL;

-- 查看特定参数
SHOW listen_addresses;
SHOW port;
SHOW shared_buffers;
SHOW work_mem;
SHOW maintenance_work_mem;

-- 查看配置文件和路径
SELECT name, setting FROM pg_settings WHERE category LIKE 'File Locations';

八、统计信息查询

8.1 表访问统计

sql 复制代码
-- 查看表的访问统计
SELECT 
    relname as table_name,
    seq_scan as 全表扫描次数,
    seq_tup_read as 全表扫描读取行数,
    idx_scan as 索引扫描次数,
    idx_tup_fetch as 索引扫描获取行数,
    n_tup_ins as 插入行数,
    n_tup_upd as 更新行数,
    n_tup_del as 删除行数
FROM pg_stat_user_tables 
ORDER BY seq_scan DESC;

8.2 最常访问的表

sql 复制代码
-- 查询最常访问的表
SELECT 
    schemaname,
    tablename,
    seq_scan + idx_scan as total_scan,
    seq_scan,
    idx_scan
FROM pg_stat_user_tables 
ORDER BY total_scan DESC 
LIMIT 10;

九、实用系统函数

sql 复制代码
-- 当前时间
SELECT now();
SELECT current_timestamp;

-- 版本信息
SELECT version();

-- 当前事务ID
SELECT txid_current();

-- 执行计划分析
EXPLAIN SELECT * FROM 表名 WHERE 条件;
EXPLAIN ANALYZE SELECT * FROM 表名 WHERE 条件;

-- 清理统计信息
ANALYZE 表名;

-- 手动垃圾回收
VACUUM 表名;
VACUUM FULL 表名;  -- 需要谨慎使用,会锁表

十、常用快捷命令(psql元命令)

sql 复制代码
-- 列出所有数据库
\l

-- 连接数据库
\c 数据库名

-- 列出所有表
\dt

-- 列出所有视图
\dv

-- 列出所有序列
\ds

-- 查看表结构
\d 表名

-- 列出所有函数
\df

-- 列出所有索引
\di

-- 查看命令历史
\s

-- 执行外部文件
\i 文件名.sql

-- 切换输出格式
\x on/off  -- 扩展显示模式

-- 查看执行时间
\timing on/off

-- 退出psql
\q

实用技巧

  1. 分页显示 :使用 \pset pager on 开启分页
  2. 结果格式化 :使用 \x auto 自动判断是否需要扩展显示
  3. 查询缓存 :使用 EXPLAIN (ANALYZE, BUFFERS) 获取更详细的执行计划
  4. 监控常用SQL:可以创建视图来简化常用复杂查询
相关推荐
我是永恒12 小时前
PostgreSQL数据库安装配置连接Paperclip
数据库·postgresql
oG99bh7CK12 小时前
FastAPI + PostgreSQL 实战:从入门到不踩坑,一次讲透
数据库·postgresql·fastapi
taWSw5OjU13 小时前
FastAPI + PostgreSQL 实战:给应用装上“缓存”和“日志”翅膀
缓存·postgresql·fastapi
镜中的女孩-potato13 小时前
win本地安装postgres教程
postgresql
jzwugang1 天前
postgresql链接详解
数据库·postgresql
R***z1011 天前
Spring Boot 整合 MyBatis 与 PostgreSQL 实战指南
spring boot·postgresql·mybatis
BduL OWED1 天前
PostgreSQL常用时间函数与时间计算提取示例说明
数据库·postgresql
TlYf NTLE1 天前
PostgreSQL的备份方式
数据库·postgresql
卡西里弗斯奥2 天前
【海量数据库】参数设置与累积
数据库·postgresql·vastbase·海量数据库
百结2142 天前
PostgreSQL 初体验
数据库·postgresql