psql 基础命令速查
psql 是 PostgreSQL 的官方命令行客户端。掌握它的元命令(以 \ 开头)和基本工作流,是高效使用 PostgreSQL 的第一步。
psql 的两类命令
| 类别 | 格式 | 示例 |
|---|---|---|
| SQL 语句 | 以 ; 结尾 | SELECT * FROM users; |
| 元命令(psql 内部命令) | 以 \ 开头,不需要 ; | \l 列出所有数据库 |
最常用的元命令
数据库与连接
\l 列出所有数据库
\c dbname 切换到指定数据库
\conninfo 显示当前连接信息
\q 退出 psql
表与 Schema
\dt 列出当前 Schema 中所有表
\dt schema.* 列出指定 Schema 中的表
\d tablename 描述表结构(列、类型、约束)
\d+ tablename 详细表结构(含索引、触发器)
\dn 列出所有 Schema
\di 列出所有索引
\dv 列出所有视图
\ds 列出所有 Sequence
用户与权限
\du 列出所有用户和角色
\dp tablename 显示表的权限
查询辅助
\e 用外部编辑器($EDITOR)编辑当前查询
\i filename.sql 执行 SQL 文件
\o output.txt 将输出重定向到文件
\timing 开/关 查询耗时显示
\x 开/关 展开模式(宽行数据改为纵向显示)
\? 显示所有元命令帮助
\h SELECT 显示 SELECT 语句的 SQL 帮助
实战操作示例
创建数据库和用户
-- 创建数据库
CREATE DATABASE myapp;
-- 创建用户
CREATE USER myapp_user WITH PASSWORD 'secure_password';
-- 授予用户对数据库的全部权限
GRANT ALL PRIVILEGES ON DATABASE myapp TO myapp_user;
-- 切换到新数据库
\c myapp
-- 授予 schema 权限(PostgreSQL 15+ 的推荐做法)
GRANT ALL ON SCHEMA public TO myapp_user;
查看表结构
\d users
-- 输出示例:
-- Column | Type | Collation | Nullable | Default
-- ----------+------------------------+-----------+----------+--------------------
-- id | bigint | | not null | nextval('users_id_seq')
-- email | character varying(255) | | not null |
-- name | character varying(100) | | |
-- created_at | timestamp with time zone | | not null | now()
-- Indexes:
-- "users_pkey" PRIMARY KEY, btree (id)
-- "users_email_key" UNIQUE CONSTRAINT, btree (email)
导入 SQL 文件
# 在 shell 中导入
psql -U postgres -d myapp -f schema.sql
# 或在 psql 内部执行
\i /path/to/schema.sql
输出格式调整
-- 展开模式:宽行数据更容易阅读
\x
SELECT * FROM users LIMIT 1;
-- 输出:
-- -[ RECORD 1 ]----
-- id | 1
-- email | alice@example.com
-- name | Alice
-- created_at | 2024-01-15 10:30:00+08
-- 关闭展开模式
\x
-- 开启查询耗时
\timing
SELECT COUNT(*) FROM orders;
-- Time: 234.567 ms
-- 对齐格式开关(适合无边框复制)
\a
\f ',' -- 设置分隔符为逗号
常用管理查询
-- 查看当前数据库大小
SELECT pg_size_pretty(pg_database_size(current_database()));
-- 查看各表大小(排序)
SELECT
tablename,
pg_size_pretty(pg_total_relation_size(schemaname || '.' || tablename)) AS total_size,
pg_size_pretty(pg_relation_size(schemaname || '.' || tablename)) AS table_size
FROM pg_tables
WHERE schemaname = 'public'
ORDER BY pg_total_relation_size(schemaname || '.' || tablename) DESC;
-- 查看当前活跃连接
SELECT pid, usename, application_name, state, query_start, query
FROM pg_stat_activity
WHERE state = 'active';
-- 查看 PostgreSQL 版本
SELECT version();
psql 提示符含义
| 提示符 | 含义 |
|---|---|
mydb=# | 已连接 mydb,当前用户是超级用户 |
mydb=> | 已连接 mydb,普通用户 |
mydb-# | 上一行命令未完成,等待续行(多行 SQL) |
mydb'# | 在单引号字符串中,等待闭合 |
.psqlrc 个人配置
在 ~/.psqlrc 文件中保存你的 psql 偏好设置:
-- ~/.psqlrc
\set PROMPT1 '%[%033[1;32m%]%n@%/%[%033[0m%]# ' -- 彩色提示符:用户@数据库
\timing -- 默认显示查询耗时
\set HISTSIZE 2000 -- 命令历史保留 2000 条
\x auto -- 自动切换展开模式
\set VERBOSITY verbose -- 详细错误信息
本节记录清单
- [ ] 熟悉
\l、\dt、\d tablename、\q这几个最常用的元命令 - [ ] 能创建数据库、用户并授权
- [ ] 能用
\i导入 SQL 文件 - [ ] 在
~/.psqlrc中开启\timing显示查询耗时
下一节:pg_hba.conf 认证配置——如何控制哪些用户能从哪些地址连接数据库?认证方式应该如何选择?