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 程序已具备读写数据库的能力。
相关推荐
数据组小组2 小时前
免费数据库管理工具深度横评:NineData 社区版、Bytebase 社区版、Archery,2026 年开发者该选哪个?
数据库·测试·数据库管理工具·数据复制·迁移工具·ninedata社区版·naivicat平替
悟空聊架构9 小时前
基于KaiwuDB在游乐场“刷卡+投币”双模消费系统中的落地实践
数据库·后端·架构
IvorySQL9 小时前
PostgreSQL 技术日报 (3月4日)|硬核干货 + 内核暗流一网打尽
数据库·postgresql·开源
进击的丸子12 小时前
虹软人脸服务器版SDK(Linux/ARM Pro)多线程调用及性能优化
linux·数据库·后端
NineData1 天前
NineData智能数据管理平台新功能发布|2026年1-2月
数据库·sql·数据分析
IvorySQL1 天前
双星闪耀温哥华:IvorySQL 社区两项议题入选 PGConf.dev 2026
数据库·postgresql·开源
ma_king1 天前
入门 java 和 数据库
java·数据库·后端
jiayou641 天前
KingbaseES 实战:审计追踪配置与运维实践
数据库
NineData2 天前
NineData 迁移评估功能正式上线
数据库·dba
NineData2 天前
数据库迁移总踩坑?用 NineData 迁移评估,提前识别所有兼容性风险
数据库·程序员·云计算