跳到主要内容

迁移数据库

blocklet server migrate 命令是扩展 Blocklet Server 实例的关键实用工具。它有助于将服务器的底层数据库从默认的 SQLite(非常适合开发和简单设置)迁移到更强大、更具可扩展性的系统,如用于生产环境的 PostgreSQL。

命令用法

要启动迁移,请使用 migrate 命令并指定目标数据库系统。

迁移命令

bash
blocklet server migrate --dialect <dialect>

选项

选项描述必需允许值
--dialect要迁移到的目标数据库系统。postgres, sqlite

该命令支持在 SQLite 和 PostgreSQL 之间迁移数据库。虽然主要用例是为了生产环境从 SQLite 升级到 PostgreSQL,但它也可用于从 PostgreSQL 迁回 SQLite,这对于为开发或调试创建可移植的快照可能很有用。

工作原理

迁移过程设计得非常简单明了。该命令首先从您现有的 SQLite 数据库中读取已安装的 blocklet 列表和其他基本配置。然后,它使用您提供的连接详细信息连接到新的 PostgreSQL 数据库,运行所有必要的 schema 迁移以创建所需的表,并用您的数据填充这些表。

Migrate Database

分步指南:迁移到 PostgreSQL

请按照以下步骤将您的 Blocklet Server 数据从 SQLite 迁移到 PostgreSQL。

前提条件

在开始之前,请确保满足以下条件:

  1. 服务器至少已启动过一次

    这是必需的,因为初始的 blocklet server start 命令会创建迁移工具需要读取的 SQLite 数据库和表。

  2. 目标数据库已准备就绪

    您的 PostgreSQL 服务器必须已安装、正在运行,并且可以从您运行 CLI 的计算机上访问。

  3. PostgreSQL 连接 URL

    您必须拥有 PostgreSQL 数据库的完整连接字符串。

第 1 步:配置目标数据库

CLI 需要知道如何连接到您的 PostgreSQL 数据库。这通过设置 ABT_NODE_POSTGRES_URL 环境变量来完成。

设置环境变量

bash
export ABT_NODE_POSTGRES_URL="postgres://user:password@host:port/database"

请确保将 userpasswordhostportdatabase 替换为您的实际 PostgreSQL 凭据。

第 2 步:运行迁移命令

设置好环境变量后,执行迁移命令。该过程将显示其进度,以类似 Getting blocklets... 的消息开始。

运行迁移

bash
blocklet server migrate --dialect postgres

第 3 步:启动服务器

一旦命令以 Migration postgres completed 消息结束,该过程就完成了。最后一步是启动您的 Blocklet Server。只要 ABT_NODE_POSTGRES_URL 环境变量存在,服务器将自动连接并使用您的新 PostgreSQL 数据库。

启动服务器

bash
blocklet server start

您的服务器现在正在 PostgreSQL 上运行,已为生产工作负载准备就绪。

故障排除

错误:SQLITE_ERROR: no such table

如果您遇到类似于 Failed to get blocklets: SQLITE_ERROR: no such table: blockletsdose not exist 的错误消息,这几乎总是意味着初始的 SQLite 数据库从未被创建。

解决方案:您必须至少运行一次服务器以初始化数据库。运行 blocklet server start,等待它完全启动,然后用 blocklet server stop 停止它。之后,您可以再次尝试迁移过程。