psql 基础命令速查
High Contrast
Dark Mode
Light Mode
Sepia
Forest
2 min read330 words

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                              -- 详细错误信息

本节记录清单


下一节pg_hba.conf 认证配置——如何控制哪些用户能从哪些地址连接数据库?认证方式应该如何选择?