PostgreSQL 常用 SQL 与运维速查

连接与查看

psql -h 127.0.0.1 -U app -d appdb
psql -c 'SELECT version();'
psql -l
psql -d appdb -c '\dt'
psql -d appdb -c '\d+ orders'
psql -d appdb -c '\df'
psql -d appdb -c 'SHOW max_connections;'

用户与权限

CREATE ROLE app LOGIN PASSWORD 'password';
GRANT CONNECT ON DATABASE appdb TO app;
GRANT USAGE ON SCHEMA public TO app;
GRANT SELECT, INSERT, UPDATE ON ALL TABLES IN SCHEMA public TO app;
\du
\dp

查询与诊断

EXPLAIN ANALYZE SELECT * FROM orders WHERE user_id = 1;
SELECT * FROM pg_stat_activity WHERE state <> 'idle';
SELECT * FROM pg_locks WHERE NOT granted;
SELECT pg_size_pretty(pg_database_size('appdb'));
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 10;

备份与恢复

pg_dump -Fc -d appdb -f appdb.dump
pg_restore -d appdb appdb.dump
pg_dump -d appdb > appdb.sql
psql -d appdb -f appdb.sql
pg_basebackup -D /backup/base -Ft -z -P

场景速查

目的 命令
当前连接 SELECT * FROM pg_stat_activity;
锁等待 SELECT * FROM pg_locks WHERE NOT granted;
表膨胀 pg_stat_user_tables + pgstattuple
复制状态 SELECT * FROM pg_stat_replication;
慢查询 pg_stat_statements
取消查询 SELECT pg_cancel_backend(pid);
终止连接 SELECT pg_terminate_backend(pid);

易错点

相关命令