返回 AI编程

PostgreSQL 安装手册:从 Docker 到 pgvector 的完整实践

PostgreSQL 安装手册

本文面向本项目的向量数据库学习场景,也适合作为普通后端开发机的 PostgreSQL 安装参考。建议优先使用 Docker 安装,因为它最容易复现、最不污染本机环境;如果要长期在本机开发,再考虑 Homebrew、apt 或系统包管理器安装。

1. 安装方案选择

| 场景 | 推荐方案 | 说明 |
| --- | --- | --- |
| 学习本项目、快速实验 pgvector | Docker Compose | 最省心,和项目配置一致 |
| macOS 本机长期开发 | Homebrew | 方便启动、停止、升级 |
| Ubuntu/Debian 服务器 | apt 或 PGDG APT 仓库 | 系统服务化管理方便 |
| 只需要命令行客户端 | PostgreSQL client / libpq | 只安装 psqlpg_dump 等工具 |
| 生产环境 | 云数据库或系统包部署 | 不建议直接照本地 Docker 简化配置上线 |

版本建议:

  • 学习和本地开发:选择固定主版本,例如 PostgreSQL 16、17 或 18。
  • 本项目已有 Docker 配置:当前使用 pgvector/pgvector:pg16
  • 生产环境不要使用 latest 标签,避免自动升级导致不可控变化。

2. Docker 安装 PostgreSQL + pgvector

这是本项目最推荐的方式。

2.1 前置条件

docker --version
docker compose version

2.2 使用本项目 Docker Compose

cd /Users/yangshuangjun/learn/book
docker compose up -d postgres
docker compose ps

预期看到 postgres 服务处于 running 状态。

2.3 连接数据库

本项目默认连接信息:

host: localhost
port: 5432
user: postgres
password: postgres
database: vectordb

本机有 psql 时:

psql "postgresql://postgres:postgres@localhost:5432/vectordb"

本机没有 psql 时,进入容器执行:

docker exec -it vector-db-course-postgres psql -U postgres -d vectordb

2.4 初始化 pgvector schema

psql "postgresql://postgres:postgres@localhost:5432/vectordb" -f sql/schema_pgvector.sql

如果你只想先验证扩展:

CREATE EXTENSION IF NOT EXISTS vector;

SELECT extname, extversion
FROM pg_extension
WHERE extname = 'vector';

2.5 停止和删除

停止容器:

docker compose stop postgres

停止并删除容器:

docker compose down

删除数据卷并清空数据库:

docker compose down -v

注意:-v 会删除数据库数据。

3. macOS 使用 Homebrew 安装

适合长期在 Mac 上做本机开发。

3.1 安装 PostgreSQL

安装指定版本,例如 PostgreSQL 17:

brew install postgresql@17

或安装 Homebrew 默认版本:

brew install postgresql

3.2 配置 PATH

Apple Silicon Mac 常见路径:

echo 'export PATH="/opt/homebrew/opt/postgresql@17/bin:$PATH"' >> ~/.zshrc
source ~/.zshrc

Intel Mac 常见路径:

echo 'export PATH="/usr/local/opt/postgresql@17/bin:$PATH"' >> ~/.zshrc
source ~/.zshrc

检查:

psql --version
postgres --version

3.3 启动服务

brew services start postgresql@17
brew services info postgresql@17

停止:

brew services stop postgresql@17

重启:

brew services restart postgresql@17

3.4 创建数据库

createdb vectordb
psql vectordb

进入 psql 后查看当前连接:

\conninfo

退出:

\q

3.5 只安装 psql 客户端

如果你只想连接 Docker 或远程 PostgreSQL,不想安装完整服务:

brew install libpq

Apple Silicon Mac:

echo 'export PATH="/opt/homebrew/opt/libpq/bin:$PATH"' >> ~/.zshrc
source ~/.zshrc

4. Ubuntu / Debian 安装

4.1 使用系统默认仓库

sudo apt update
sudo apt install -y postgresql postgresql-contrib

检查服务:

sudo systemctl status postgresql

启动并设置开机自启:

sudo systemctl start postgresql
sudo systemctl enable postgresql

4.2 创建数据库和用户

sudo -iu postgres
psql
CREATE DATABASE vectordb;
CREATE USER vector_user WITH PASSWORD 'change_me';
GRANT ALL PRIVILEGES ON DATABASE vectordb TO vector_user;
\q

4.3 使用 PostgreSQL 官方 PGDG APT 仓库

如果你需要安装特定主版本,可以使用 PostgreSQL Global Development Group 维护的 APT 仓库。具体命令建议以官方页面为准:

  • Ubuntu: https://www.postgresql.org/download/linux/ubuntu/
  • Debian: https://www.postgresql.org/download/linux/debian/

安装指定版本示例:

sudo apt install -y postgresql-17 postgresql-client-17

5. 安装 pgvector

5.1 Docker 方式

本项目已经使用带 pgvector 的镜像:

image: pgvector/pgvector:pg16

因此容器启动后只需要在数据库里启用扩展:

CREATE EXTENSION IF NOT EXISTS vector;

5.2 Ubuntu / Debian 包方式

如果使用 PGDG 仓库,通常可以安装对应版本的 pgvector 包:

sudo apt install -y postgresql-17-pgvector

进入数据库后启用扩展:

CREATE EXTENSION IF NOT EXISTS vector;

5.3 macOS Homebrew

brew install pgvector

然后进入数据库执行:

CREATE EXTENSION IF NOT EXISTS vector;

如果 PostgreSQL 有多个版本,注意 pgvector 是否安装到了你正在运行的 PostgreSQL 版本对应目录。

6. 常用 psql 命令

连接数据库:

psql "postgresql://USER:PASSWORD@HOST:PORT/DBNAME"

常用元命令:

\l              -- 列出数据库
\c vectordb     -- 切换数据库
\dt             -- 列出表
\d table_name   -- 查看表结构
\dx             -- 查看扩展
\conninfo       -- 查看当前连接
\q              -- 退出

执行 SQL 文件:

psql "postgresql://postgres:postgres@localhost:5432/vectordb" -f sql/schema_pgvector.sql

7. 配置文件位置

Docker 数据目录由 volume 管理:

volumes:
  - pgvector-data:/var/lib/postgresql/data

查看 Docker volume:

docker volume ls

macOS Homebrew:

brew services info postgresql@17
brew --prefix postgresql@17

Ubuntu / Debian 常见配置文件:

/etc/postgresql/<version>/main/postgresql.conf
/etc/postgresql/<version>/main/pg_hba.conf

重载配置:

sudo systemctl reload postgresql

重启服务:

sudo systemctl restart postgresql

8. 连接与权限配置

本机开发通常只监听 localhost:

listen_addresses = 'localhost'

如果需要远程连接,才考虑:

listen_addresses = '*'

远程连接必须配合防火墙、强密码和 pg_hba.conf,不要直接暴露到公网。

pg_hba.conf 示例:

host    all    all    127.0.0.1/32     scram-sha-256
host    all    all    192.168.1.0/24    scram-sha-256

9. 备份与恢复

导出单库:

pg_dump "postgresql://postgres:postgres@localhost:5432/vectordb" > vectordb.sql

恢复:

psql "postgresql://postgres:postgres@localhost:5432/vectordb" < vectordb.sql

自定义格式备份:

pg_dump -Fc "postgresql://postgres:postgres@localhost:5432/vectordb" -f vectordb.dump

恢复自定义格式:

pg_restore -d "postgresql://postgres:postgres@localhost:5432/vectordb" vectordb.dump

10. 本项目验证步骤

启动数据库:

cd /Users/yangshuangjun/learn/book
docker compose up -d postgres

初始化 schema:

psql "postgresql://postgres:postgres@localhost:5432/vectordb" -f sql/schema_pgvector.sql

验证扩展:

psql "postgresql://postgres:postgres@localhost:5432/vectordb" -c "SELECT extname, extversion FROM pg_extension WHERE extname = 'vector';"

验证表:

psql "postgresql://postgres:postgres@localhost:5432/vectordb" -c "\dt"

预期能看到:

documents
chunks
embeddings

11. 常见问题

11.1 端口 5432 被占用

lsof -i :5432

解决方式:

  • 停掉本机 PostgreSQL。
  • 或修改 Docker Compose 端口,例如 "5433:5432"

连接时对应改成:

psql "postgresql://postgres:postgres@localhost:5433/vectordb"

11.2 psql: command not found

macOS:

brew install libpq

Ubuntu/Debian:

sudo apt install -y postgresql-client

11.3 password authentication failed

检查:

  • 用户名是否正确。
  • 密码是否正确。
  • 连接端口是否是你期望的 PostgreSQL 实例。
  • Docker volume 是否复用了旧密码初始化的数据。

学习环境可删除 volume 重建:

docker compose down -v
docker compose up -d postgres

11.4 extension "vector" is not available

说明当前 PostgreSQL 没有安装 pgvector 扩展文件。

解决:

  • Docker:确认镜像是 pgvector/pgvector:<version>,不是普通 postgres:<version>
  • Ubuntu/Debian:安装 postgresql-<version>-pgvector
  • macOS:安装 brew install pgvector,并确认 PostgreSQL 版本匹配。

11.5 数据库启动但连接不上

docker compose logs postgres
docker compose ps
psql "postgresql://postgres:postgres@localhost:5432/vectordb"

12. 安全提醒

学习环境可以使用简单密码:

postgres / postgres

生产环境不要这样做。至少需要:

  • 使用强密码。
  • 不暴露公网 5432。
  • 使用最小权限用户。
  • 定期备份。
  • 配置监控和告警。
  • 使用云数据库安全组或内网访问。
  • 对重要数据启用审计和加密策略。

13. 参考资料

  • PostgreSQL macOS 下载:https://www.postgresql.org/download/macosx/
  • PostgreSQL Ubuntu 安装:https://www.postgresql.org/download/linux/ubuntu/
  • PostgreSQL Debian 安装:https://www.postgresql.org/download/linux/debian/
  • PostgreSQL PGDG APT 仓库:https://apt.postgresql.org/
  • Postgres Docker 官方镜像:https://hub.docker.com/_/postgres
  • Docker Postgres 文档:https://github.com/docker-library/docs/blob/master/postgres/README.md
  • pgvector Docker 镜像:https://hub.docker.com/r/pgvector/pgvector
  • pgvector 项目文档:https://github.com/pgvector/pgvector