PostgreSQL 安装与 psql 命令行
本章带你从零搭建 PostgreSQL 环境:选择适合你系统的安装方式、理解"集群 / 数据库 / 角色"三层概念、并熟悉 psql 命令行的常用操作。整个过程不超过 15 分钟。
1. 选择安装方式
PostgreSQL 在主流系统上都有现成的安装包,选最顺手的一种即可:
# === macOS:推荐 Homebrew(自动处理依赖)===
brew install postgresql@16
brew services start postgresql@16 # 开机自启
# 装完后默认有一个和系统用户同名的超级用户
# === Ubuntu / Debian:用官方仓库(比 apt 默认版本新)===
sudo sh -c 'echo "deb https://apt.postgresql.org/pub/repos/apt $(lsb_release -cs)-pgdg main" \
> /etc/apt/sources.list.d/pgdg.list'
curl -fsSL https://www.postgresql.org/media/keys/ACCC4CF8.asc | \
sudo gpg --dearmor -o /etc/apt/trusted.gpg.d/postgresql.gpg
sudo apt update
sudo apt install postgresql-16
# === Windows:官网下载安装包,一路 Next 即可 ===
# https://www.postgresql.org/download/windows/
# 安装器会顺带装好 pgAdmin 图形客户端和 Stack Builder
# === 通用方案:Docker 一行启动 ===
docker run -d --name pg \
-e POSTGRES_PASSWORD=secret \
-p 5432:5432 \
postgres:16四种方式的取舍:
- Homebrew(macOS):开发者最常用,版本新、升级方便。
- 官方 apt 仓库(Ubuntu):比发行版自带的新,安全更新及时。
- Windows 安装器:图形化向导,顺带装好 pgAdmin,新手友好。
- Docker:不污染宿主、版本切换灵活,适合跑 CI 或临时测试。
2. 三个核心概念:集群、数据库、角色
初学者最容易把这三层搞混,先理清楚后面就顺了:
- 集群(cluster):一个 PostgreSQL 实例,背后是一个数据目录。一台机器可以跑多个集群(不同端口),但通常一个就够。
- 数据库(database):集群里的一个命名空间。业务表存在数据库里。一次连接只能进一个库(用
\\c切换)。 - 角色(role):Postgres 把"用户"和"组"统一成"角色"。
LOGIN属性的角色才能登录,否则只是用来做权限继承的组。
Ubuntu/Debian 系统用 pg_lsclusters / pg_ctlcluster 管理集群:
# PostgreSQL 的三层概念(容易混):
# 集群(cluster) → 一个数据目录,一台实例
# 数据库(database) → 集群里的一个命名空间,业务表存在这里
# 角色(role) → 登录用户/组的统一概念
# Debian / Ubuntu 用 postgres-cluster 工具管理集群
pg_lsclusters # 列出所有集群
# Ver Cluster Port Status Owner Data directory
# 16 main 5432 online postgres /var/lib/postgresql/16/main
sudo pg_ctlcluster 16 main start # 启动
sudo pg_ctlcluster 16 main stop # 停止
sudo pg_ctlcluster 16 main restart # 重启macOS 和 Windows 一般用 brew services 或服务管理器,无需关心 cluster 概念。
3. 创建业务数据库与角色
默认的 postgres 超级用户不应该被业务代码直接使用——就像 Linux 里你不该一直用 root 一样。装好后立刻做两件事:建一个业务专用角色,再建一个归属该角色的数据库。
# 切换到 postgres 超级用户(Ubuntu 安装后默认只能这样登录)
sudo -u postgres psql
# 进 psql 后,创建一个新数据库和对应的角色
CREATE ROLE app_user WITH LOGIN PASSWORD 'your_password';
CREATE DATABASE app_db OWNER app_user;
# 退出 psql 后,用新角色连接
psql -U app_user -d app_db -h 127.0.0.1
# 输入密码后进入注意 密码用单引号包裹,这是 SQL 字符串字面量的标准写法。生产环境密码建议用环境变量或秘密管理服务,不要硬编码进代码。
4. psql 命令行客户端
psql 是 PostgreSQL 的官方命令行客户端,功能强大但学习曲线略陡。掌握下面这些反斜杠命令,日常操作就够用了:
# === psql 是 PostgreSQL 的官方命令行客户端 ===
# 连接语法:psql -U 用户 -d 库 -h 主机 -p 端口
psql -U postgres -d postgres -h localhost -p 5432
# 进入 psql 后,常用反斜杠命令(以 \ 开头,加分号结尾不需要):
\l 列出所有数据库
\l+ 显示数据库大小等更多信息
\c app_db 切换到 app_db 数据库
\dt 列出当前库的所有表
\dt+ 显示表大小
\d users 查看 users 表结构(列、类型、索引、约束)
\di 列出所有索引
\du 列出所有角色(用户)
\df 列出所有函数
\dx 列出已安装的扩展
\dn 列出所有 schema
\db 列出所有表空间
\timing 开启/关闭 SQL 执行耗时显示
\x 切换"扩展显示"模式(宽表竖着看更清楚)
\? 查看所有反斜杠命令
\q 退出 psql几个使用技巧:
- 自动补全:按 Tab 能补全表名、列名、命令(类似 bash)。
- 历史记录:上下方向键切换之前执行过的 SQL。
- 多行输入:SQL 可以跨多行,直到出现分号
;才执行。如果想取消当前输入,按Ctrl+C。 - 临时文件:复杂查询可以写在 .sql 文件里,再用
\\i filename.sql加载执行。
5. 执行 SQL 的几种姿势
除了交互式输入,psql 还支持这些常见用法,日常开发经常用到:
# 在 psql 里执行 SQL(以分号结尾):
SELECT now();
/* 输出:
now
-------------------------------
2026-08-05 14:30:00.123456+08
*/
# 从操作系统命令行直接执行一句 SQL:
psql -U postgres -d postgres -c "SELECT version();"
# 执行一个 .sql 文件(常用作初始化脚本):
psql -U postgres -d app_db -f init.sql
# 把查询结果导出为 CSV:
\copy (SELECT * FROM users) TO 'users.csv' CSV HEADER;\\copy 是导出/导入 CSV 的利器,无需服务器文件权限(由客户端读写本地文件),比 COPY 更适合普通用户。
6. 图形客户端
不喜欢命令行?下面几个图形客户端任选其一,体验都很成熟:
- pgAdmin:PostgreSQL 官方出品,跨平台、功能最全,但略重。Windows 安装器会顺带装上。
- DBeaver:通用 SQL 客户端,支持几乎所有数据库,免费版功能足够。
- TablePlus:macOS 上颜值最高,付费但免费版可用。
- DataGrip:JetBrains 出品,智能补全强大,付费。
- VS Code 插件:如 PostgreSQL by Chris Kolkman,或 Database Client by Weijan Chen。
建议图形 + 命令行并用:图形界面适合浏览表结构、看数据预览、做报表;命令行适合写脚本、批量执行、SSH 到服务器排障。
7. 云托管 Postgres
不想自己运维?这些云服务几分钟就能拿到一个高可用 Postgres 实例:
- Supabase:免费档 500MB,自带 REST/GraphQL API,适合个人项目和初创。
- Neon:Serverless Postgres,按用量计费,支持分支(像 git 一样 fork 数据库)。
- AWS RDS / 阿里云 RDS / 腾讯云 PostgreSQL:企业级托管,自动备份和高可用。
- Cloudflare Hyperdrive:缓存连接池,让边缘函数连 Postgres 也很快。
小结
到这里你应该能在本地连上 Postgres、创建业务数据库和角色、用 psql 浏览表结构。下一篇我们正式学 SQL 语法基础——这是和数据库"说话"的方式。
← 上一篇 PostgreSQL 简介
下一篇 PostgreSQL SQL 语法基础 →