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

四种方式的取舍:

2. 三个核心概念:集群、数据库、角色

初学者最容易把这三层搞混,先理清楚后面就顺了:

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

几个使用技巧:

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. 图形客户端

不喜欢命令行?下面几个图形客户端任选其一,体验都很成熟:

建议图形 + 命令行并用:图形界面适合浏览表结构、看数据预览、做报表;命令行适合写脚本、批量执行、SSH 到服务器排障。

7. 云托管 Postgres

不想自己运维?这些云服务几分钟就能拿到一个高可用 Postgres 实例:

小结

到这里你应该能在本地连上 Postgres、创建业务数据库和角色、用 psql 浏览表结构。下一篇我们正式学 SQL 语法基础——这是和数据库"说话"的方式。

← 上一篇 PostgreSQL 简介

下一篇 PostgreSQL SQL 语法基础

✈️💬