DATABASE_URL 环境变量决定。
SQLite vs PostgreSQL
已知限制:SQLite 并发流式传输
连接池配置
FIM One 为每个后端内部配置 SQLAlchemy 连接池设置。这些是经过调整的默认值,不需要环境变量 — 它们会根据DATABASE_URL 方案自动应用。了解它们有助于解释运行时行为。
SQLite 连接池设置
WAL 模式和 30 秒忙碌超时通过 SQLite PRAGMA 在每个新连接上设置。这种组合确保短期读取(加载对话列表、获取设置)不会被长时间运行的写入事务阻止,并且并发写入会优雅地排队而不是失败。
PostgreSQL 连接池设置
PostgreSQL 通过 MVCC 原生处理并发,因此连接池设置主要控制资源使用而非竞争。30 分钟的回收间隔可以避免防火墙、负载均衡器或托管数据库服务无声地丢弃空闲 TCP 连接的问题。
切换到 PostgreSQL
第 1 步:启动 PostgreSQL 实例
最快的方式是使用 Docker:第 2 步:设置 DATABASE_URL
在你的.env 文件中添加或更新以下行:
第 3 步:重启 FIM One
现有 SQLite 数据不会自动迁移。 将
DATABASE_URL 从 SQLite 切换到 PostgreSQL 会使用全新数据库启动。如果您在 SQLite 中有需要保留的现有对话、智能体或连接器,请参阅下面的数据迁移部分。Docker Compose(推荐用于生产环境)
如果使用 Docker Compose 部署,PostgreSQL 和 Redis 已包含并自动配置 — 无需额外设置。docker-compose.yml 在内部设置 DATABASE_URL — 你的 .env 值会被覆盖:
数据迁移
SQLite 到 PostgreSQL 没有内置的迁移工具。对于大多数部署,推荐的方法取决于您的情况: 全新部署(无现有数据): 只需将DATABASE_URL 设置为您的 PostgreSQL 连接字符串并启动 FIM One。所有表都会自动创建。
必须保留现有数据: 需要手动导出/导入。一般方法:
- 使用
sqlite3CLI 或 Python 脚本等工具从 SQLite 导出数据 - 根据需要转换数据(SQLite 和 PostgreSQL 有细微的类型差异)
- 使用
psql、pg_restore或应用级别的插入脚本导入到 PostgreSQL