
如何把 AI-Trader 的 SQLite 数据迁移到 PostgreSQL【免费下载链接】AI-TraderAI-Trader: 100% Fully-Automated Agent-Native Trading项目地址: https://gitcode.com/GitHub_Trending/aitrad/AI-Trader如果你自建的 AI-Trader 一开始用 SQLite 跑了本地实例DATABASE_URL留空、走DB_PATH现在要把它部署到共享或生产环境就需要换到 PostgreSQL。根据 README.md 的 Self-hosting (database) 一节官方明确给出两种数据库模式SQLite 仅适合本地快速启动PostgreSQL 面向共享/生产部署而且只要DATABASE_URL非空服务就会使用 PostgreSQL 并忽略DB_PATH。项目自带了一个一次性迁移脚本 service/server/scripts/migrate_sqlite_to_postgres.py负责建表、清空目标表、按依赖顺序拷贝 22 张表的数据、归一化时间戳字段最后重置自增序列。本文就按这个脚本给出完整的操作路径。迁移前要知道的三件事在动手前先确认以下事实它们决定了迁移脚本的行为边界迁移范围固定。脚本按TABLE_ORDER顺序迁移 22 张表agents、users、agent_messages、agent_tasks、listings、orders、arbitrators、dispute_votes、points_transactions、user_tokens、rate_limits、signal_sequence、signals、signal_replies、subscriptions、positions、polymarket_settlements、market_news_snapshots、macro_signal_snapshots、etf_flow_snapshots、stock_analysis_snapshots、profit_history。源库里不属于这个清单的表不会被拷贝。目标表会被清空。脚本在导入前对目标 PostgreSQL 执行TRUNCATE TABLE ... RESTART IDENTITY CASCADE。也就是说目标库中这些表的已有数据会被删除迁移是以 SQLite 侧为准的全量覆盖。对目标库执行前请确认里面没有需要保留的独立数据。源库位置有默认值。不指定--source时默认读取项目根目录下的service/server/data/clawtrader.db也可以用环境变量DB_PATH或--source参数覆盖与.env中的配置保持一致即可。准备条件一个仍在使用的 SQLite 实例数据库文件默认在service/server/data/clawtrader.db即.env中DB_PATH指向的位置。一个可用的 PostgreSQL 实例你已有连接所需的地址、端口、用户名、密码和库名。Python 环境已安装服务端依赖。service/requirements.txt 中声明了psycopg[binary]3.2.1和python-dotenv1.0.0迁移脚本依赖这两个包database.py 中的报错信息也提示 PostgreSQL 支持需要 psycopgInstall service requirements first。配置 DATABASE_URL第一步是按 README.md 的说明配置环境文件把.env.example复制为.env然后设置DATABASE_URL。.env.example 中给出了示例写法注意这是文档示例用户名、密码和库名需要替换成你的实际值# PostgreSQL (recommended for shared/production deployments) DATABASE_URLpostgresql://ai_trader:change-me127.0.0.1:5432/ai_trader.env中DB_PATHservice/server/data/clawtrader.db保持不变即可——迁移脚本正是用它来定位源库。配置生效的判断标准很简单DATABASE_URL非空即代表选择 PostgreSQL 后端此时DB_PATH被忽略README 与.env.example中的注释都明确了这一优先级规则。执行迁移在仓库根目录运行脚本。脚本头部文档给出的用法是DATABASE_URLpostgresql://... python service/server/scripts/migrate_sqlite_to_postgres.py这里有一个值得注意的细节脚本内部用load_dotenv(ENV_PATH, overrideTrue)加载项目根目录的.env注释写明目的是 the project .env to win over any stale shell exports即.env中的值会覆盖 shell 里遗留的环境变量。因此更稳妥的做法是确保DATABASE_URL已经写进.env然后直接运行python service/server/scripts/migrate_sqlite_to_postgres.py也可以显式传参覆盖两个输入python service/server/scripts/migrate_sqlite_to_postgres.py \ --source /path/to/clawtrader.db \ --target postgresql://ai_trader:password127.0.0.1:5432/ai_trader其中--source指向 SQLite 文件默认即DB_PATH--target是 PostgreSQL 连接 URL默认取DATABASE_URL。两个参数只在你需要临时指向别的库时才需要日常迁移用默认值即可。脚本运行后依次做四件事调用init_database()在目标库初始化表结构TRUNCATE目标表即上节说明的数据清空按TABLE_ORDER逐表拷贝created_at、updated_at、settled_at等时间戳列会被统一归一化为带Z后缀的 UTC ISO 格式最后调用setval把各表id序列重置到MAX(id)保证后续自增 id 不冲突。如何判断迁移成功脚本自身的输出就是核对依据运行过程中会看到[migrate] initializing target schema: postgresql://... [migrate] truncating target tables [migrate] agents: copied N rows [migrate] users: copied N rows [migrate] signals: copied N rows ... [migrate] resetting sequences [migrate] done每 5 万行会打印一次拷贝进度最后一行[migrate] done表示全部完成。你可以把各表打印的行数与 SQLite 侧对应表的记录数对照确认没有漏表。以上为脚本按代码逻辑产生的输出格式N 为实际行数并非固定数值。两类失败会直接报错退出SQLite database not found: 路径—— 源库路径不对检查DB_PATH或改用--sourceDATABASE_URL is required.—— 既没有.env也没有命令行提供DATABASE_URL回到上一步配置。让服务切到 PostgreSQL迁移完成后不需要额外开关只要.env中DATABASE_URL非空服务启动时就会走 PostgreSQL 连接database.py 中using_postgres()直接以DATABASE_URL是否为空判断。确认.env已写好DATABASE_URL按你平时的方式重启 AI-Trader 服务即可DB_PATH此后不再参与工作。边界与限制这是一次性迁移脚本不是增量同步工具迁移脚本只负责把当前 SQLite 快照整体搬过去切换后两侧不再有同步关系旧实例应停止写入避免双写。目标库的表必须能被init_database()初始化连接 URL 里账号需要对目标库有建表和TRUNCATE权限。只迁移上面列出的 22 张表如果你的 SQLite 里手工加过脚本清单之外的表这部分数据不在迁移范围内。迁移完成后建议核对关键表如agents、signals、positions的行数输出再重启服务验证登录、信号列表等接口行为与迁移前一致。【免费下载链接】AI-TraderAI-Trader: 100% Fully-Automated Agent-Native Trading项目地址: https://gitcode.com/GitHub_Trending/aitrad/AI-Trader创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考