如何用 Freqtrade convert-db 命令把 SQLite 数据库迁移到 PostgreSQL?
Freqtrade 在 Live 和 Dry-Run 模式下会把交易记录存放在本地 SQLite 文件中,默认文件名分别是 tradesv3.sqlite(Live)和 tradesv3.dryrun.sqlite(Dry-Run)。如果你希望把交易数据存储切换为 PostgreSQL,可以使用 freqtrade convert-db 子命令,把现有 SQLite 库中的所有 trades、orders 和 Pairlocks 迁移过去。这篇文章给出迁移前的准备、迁移命令,以及如何确认数据已进入新库并让机器人切过去。
迁移前需要准备什么
Freqtrade 底层使用 SQLAlchemy,官方文档中列出已测试、确认可用的数据库系统为:sqlite(默认)、PostgreSQL、MariaDB。注意 Freqtrade 本身不依赖也不安装任何额外的数据库驱动,PostgreSQL 驱动需要自行安装:
pip install "psycopg[binary]"
开始迁移前,请确认以下条件:
- 有一个已完成安装并可运行的 freqtrade 环境;
- 要迁移的 SQLite 数据库文件存在,且里面有需要迁移的数据(默认路径见上,位于工作目录下);
- PostgreSQL 服务已自行部署并可连接。Freqtrade 文档明确说明:使用外部数据库系统即表示你了解如何管理该系统,freqtrade 团队不会提供这些数据库系统的安装、维护或备份支持;
- 目标数据库必须为空。文档中的警告原文是:请确保只在空的目标数据库上使用该命令,Freqtrade 会执行常规迁移,但如果库中已存在条目可能会失败。
执行 convert-db 迁移
convert-db 子命令提供两个参数(见 命令帮助):
--db-url PATH:目标数据库 URL,用于覆盖 trades 数据库地址;--db-url-from PATH:迁移时使用的源数据库 URL。
PostgreSQL 的连接 URL 在 advanced-setup.md 中给出的格式为:
postgresql+psycopg://<username>:<password>@localhost:5432/<database>
完整的迁移命令如下,其中 <username>、<password>、<database> 需要替换为你实际的 PostgreSQL 用户名、密码和库名:
freqtrade convert-db \
--db-url-from sqlite:///tradesv3.sqlite \
--db-url "postgresql+psycopg://<username>:<password>@localhost:5432/<database>"
如果原始数据来自 Dry-Run 模式的机器人,把 --db-url-from 的值换成 sqlite:///tradesv3.dryrun.sqlite。
命令内部的处理逻辑可以在 db_commands.py 中看到:start_convert_db 先以工具模式初始化配置,然后分别对目标库和源库调用 init_db,再执行 migrate_db 把数据写入目标库。migrate_db(见 db_migration.py)依次迁移 trades(含其 orders)、Pairlocks、key-value 对、custom data 条目和 wallet history 条目,随后按目标库中的最大 ID 更新各表的序列(sequence),并在结束时输出一条形如 Migrated X Trades, Y Pairlocks, Z Key-Value pairs, N Custom Data entries, and M Wallet History entries. 的汇总日志,可用于判断迁移实际移动了多少数据。
验证迁移结果
迁移命令结束后,用文档中的 show-trades 子命令直接查询新库中的交易记录,确认数据已经可读:
freqtrade show-trades --db-url "postgresql+psycopg://<username>:<password>@localhost:5432/<database>"
show-trades 的作用是把数据库中选定(或全部)的交易打印到屏幕,也支持 --trade-ids 过滤和 --print-json 输出 JSON。如果命令能列出原 SQLite 库中的交易,说明目标库已经成功接收入数据。
让机器人切换到新数据库
确认无误后,在 trade 命令上加 --db-url 参数,把机器人指向 PostgreSQL:
freqtrade trade -c MyConfig.json -s MyStrategy --db-url "postgresql+psycopg://<username>:<password>@localhost:5432/<database>"
文档说明,使用这类非 SQLite 数据库系统时,Freqtrade 会在启动时自动创建所需的表。如果同时运行多个 Freqtrade 实例,必须为每个实例单独建一个数据库,或使用不同的用户/schema 来区分连接。
限制与注意事项
- 目标库必须为空,已有数据时迁移可能失败;
psycopg[binary]驱动需要自行安装,Freqtrade 不会代装;- Freqtrade 团队不负责 PostgreSQL 的安装、维护与备份支持;
- 本文路径只覆盖 SQLite 到 PostgreSQL 的迁移,同一命令也适用于 PostgreSQL 到其他 PostgreSQL 的迁移,参数用法一致。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考



