本文档涵盖了在实时迁移过程中您可能会遇到的常见问题和场景。

实时迁移涉及多个后台进程来管理迁移的不同阶段。这些进程的日志对于排查意外行为非常有用。您可以在 <volume_mount>/logs 目录中找到这些日志。

当您将 自托管TimescaleDB 托管服务 (MST) 数据库迁移到 Timescale 时,源数据库和目标 Timescale 服务 必须运行相同版本的 TimescaleDB。

在您开始 实时迁移 之前

  1. 检查源数据库和目标 Timescale 服务上运行的 TimescaleDB 版本

    select extversion from pg_extension where extname = 'timescaledb';
  2. 如果源数据库上的 TimescaleDB 版本低于您的 Timescale 服务,则可以:

    • 降级:在您的 Timescale 服务上重新安装与源数据库匹配的旧版 TimescaleDB

      1. 连接到您的 Timescale 服务并检查可用 TimescaleDB 版本

        SELECT version FROM pg_available_extension_versions WHERE name = 'timescaledb' ORDER BY 1 DESC;
      2. 如果可用 TimescaleDB 版本与您的源数据库匹配

        1. 从您的 Timescale 服务中卸载 TimescaleDB

          DROP EXTENSION timescaledb;
        2. 重新安装正确的 TimescaleDB 版本

          CREATE EXTENSION timescaledb VERSION '<version>';
        注意

        在创建 TimescaleDB 扩展时,您可能需要使用 psql -X 重新连接到您的 Timescale 服务。

    • 升级:对于自托管数据库,升级 TimescaleDB 以匹配您的 Timescale 服务。

实时迁移日志记录警告 WARNING: no tuple identifier for UPDATE in table,当它无法在从源数据库收到 UPDATE 语句后确定应更新哪些特定行时,就会出现这种情况。当源数据库中接收 UPDATE 语句的表缺少 PRIMARY KEYREPLICA IDENTITY 设置时,就会发生这种情况。为了使实时迁移成功复制 UPDATEDELETE 语句,表必须具有 PRIMARY KEYREPLICA IDENTITY 设置作为先决条件。

如果您的 PostgreSQL 表使用原生分区,在根(父)表上设置 REPLICA IDENTITY 不会自动将其应用于分区子表。您必须手动在每个分区子表上设置 REPLICA IDENTITY

实时迁移不支持从读或故障转移副本进行复制。您必须提供指向您的源数据库的直接连接字符串,以进行实时迁移。

实时迁移不支持连接池管理器。您必须提供指向您的源数据库和目标数据库的直接连接字符串,才能使实时迁移顺利运行。

不能,Timescale 云不能用作实时迁移的源数据库。

目前,实时迁移不允许排除模式或表以进行复制,但此功能预计将在未来的版本中添加。但是,可以使用 --skip-table-data 标志来跳过表数据,作为一种变通方法。有关更多信息,请参考 migrate 子命令下的帮助文本。

关键字

发现此页面上的问题?报告问题 或 编辑此页面 在 GitHub 上。