03_数据库配置指南:PostgreSQL 17 + pgvector 向量存储

第一阶段:启动 PostgreSQL 17 容器

我们将使用 Docker Desktop 来管理数据库。在 2026 年的开发流中,这是 Windows 环境的标准配置。

1.1 创建配置文件

在你的项目根目录 KnoSphere/ 下,新建一个文件叫 docker-compose.yml。填入以下内容:

yaml 复制代码
services:
  db:
    image: pgvector/pgvector:pg17 # 使用内置向量支持的 PostgreSQL 17 镜像
    ports:
      - "5432:5432"
    environment:
      POSTGRES_USER: admin
      POSTGRES_PASSWORD: knosphere_password
      POSTGRES_DB: knosphere
    volumes:
      - postgres_data:/var/lib/postgresql/data

volumes:
  postgres_data:

1.2 启动数据库

在终端根目录下运行:

powershell 复制代码
docker-compose up -d

提示 :看到 Container knosphere-db-1 Started 就表示数据库已经在后台跑起来了。


第二阶段:后端连接配置 (Python + SQLModel)

我们将回到 apps/api 目录,告诉我们的 Python 程序如何找到数据库。

2.1 添加数据库依赖

进入后端目录,利用 uv 极速安装数据库驱动和 SQLModel(这是 2026 年最流行的 ORM 框架,完美兼容 FastAPI):

powershell 复制代码
cd apps/api
uv add psycopg2-binary

2.2 配置环境变量

apps/api 下新建一个 .env 文件,存放敏感信息:

plaintext 复制代码
DATABASE_URL=postgresql://admin:knosphere_password@localhost:5432/knosphere

可选优化 :如果你计划使用 Pydantic 进行更严格的配置验证,可以安装 python-dotenvpydantic

powershell 复制代码
uv add python-dotenv pydantic

2.3 编写连接代码

apps/api 下新建 database.py

python 复制代码
from sqlmodel import create_engine, SQLModel, Session
import os
from dotenv import load_dotenv

load_dotenv()
database_url = os.getenv("DATABASE_URL")
engine = create_engine(database_url)

def init_db():
    # 自动创建所有定义的表格
    SQLModel.metadata.create_all(engine)

def get_session():
    with Session(engine) as session:
        yield session

第三阶段:开启 AI 向量"外挂"

为了让知识库支持语义搜索,我们需要激活 pgvector 扩展。

3.1 创建主应用文件 (main.py)

apps/api 目录下,创建 main.py,内容如下:

python 复制代码
from fastapi import FastAPI
from contextlib import asynccontextmanager
from database import init_db, engine
from sqlmodel import text

@asynccontextmanager
async def lifespan(app: FastAPI):
    # 启动时执行
    with engine.connect() as conn:
        # 激活向量扩展,这是 2026 年 RAG 系统的核心
        conn.execute(text("CREATE EXTENSION IF NOT EXISTS vector;"))
        conn.commit()
    init_db()
    yield
    # 关闭时执行(如果需要清理资源)

app = FastAPI(lifespan=lifespan)

@app.get("/")
async def root():
    return {"message": "Hello from KnoSphere API!"}

@app.get("/health")
async def health():
    return {"status": "healthy"}

if __name__ == "__main__":
    import uvicorn
    uvicorn.run(app, host="0.0.0.0", port=8000)

可选步骤:如果你想要单独运行 API 服务器进行测试,可以安装 uvicorn:

powershell 复制代码
uv add uvicorn[standard]

为什么这样设计?

  • PostgreSQL 17: 相比旧版本,它在 JSON 性能和并发扫描上有了大幅提升,非常适合存储复杂的 AI 元数据。
  • pgvector 0.8+: 让你可以在同一个数据库里既查订单、又查语义相似的文档,无需在多个数据库间同步数据。
  • HNSW 索引: 虽然我们现在还没写,但 PostgreSQL 17 支持 HNSW 索引,能让你的千万级数据检索在毫秒内完成。

检查点:你的数据工厂已开工

  1. 数据库容器:正在后台静默运行。
  2. 向量扩展:已准备好接收 Embedding 向量。
  3. 连接链路:Python 程序已具备读写数据库的能力。
相关推荐
A.说学逗唱的Coke1 小时前
【大模型专题】向量数据库深度解析:从原理到实战,构建企业级 AI 知识检索底座
数据库·人工智能
果丁智能1 小时前
智能锁赋能网约房民宿数字化管控:身份核验+远程授权,筑牢安全防线、降本增效
网络·数据库·人工智能·安全·智能家居
无敌的牛2 小时前
redis学习过程
数据库·redis·学习
IT北辰2 小时前
神通数据库管理系统V7.0.251210 for Windows(x86 64bit)安装部署
数据库·神通
北顾笙9802 小时前
MySQL-day2
数据库·mysql
Demons_kirit2 小时前
新项目如何连接上自己本地的数据库
数据库
洪晓露3 小时前
将 rke2 集群证书延长至 10 年
运维·服务器·数据库
程序猿乐锅4 小时前
【MySQL | 第八篇】MySQL 视图
数据库·mysql
jieyucx4 小时前
SQL 查询终极高阶通鉴:从零基础拆解到工业级多表联查、窗口函数与索引优化
数据库·sql
ai_coder_ai5 小时前
论 NoSQL 数据库技术及其应用
数据库·nosql