本文档涵盖了在实时迁移过程中您可能会遇到的常见问题和场景。
实时迁移涉及多个后台进程来管理迁移的不同阶段。这些进程的日志对于排查意外行为非常有用。您可以在 <volume_mount>/logs
目录中找到这些日志。
当您将 自托管 或 TimescaleDB 托管服务 (MST) 数据库迁移到 Timescale 时,源数据库和目标 Timescale 服务 必须运行相同版本的 TimescaleDB。
在您开始 实时迁移 之前
检查源数据库和目标 Timescale 服务上运行的 TimescaleDB 版本
select extversion from pg_extension where extname = 'timescaledb';如果源数据库上的 TimescaleDB 版本低于您的 Timescale 服务,则可以:
降级:在您的 Timescale 服务上重新安装与源数据库匹配的旧版 TimescaleDB
连接到您的 Timescale 服务并检查可用 TimescaleDB 版本
SELECT version FROM pg_available_extension_versions WHERE name = 'timescaledb' ORDER BY 1 DESC;如果可用 TimescaleDB 版本与您的源数据库匹配
从您的 Timescale 服务中卸载 TimescaleDB
DROP EXTENSION timescaledb;重新安装正确的 TimescaleDB 版本
CREATE EXTENSION timescaledb VERSION '<version>';
注意
在创建 TimescaleDB 扩展时,您可能需要使用
psql -X
重新连接到您的 Timescale 服务。
升级:对于自托管数据库,升级 TimescaleDB 以匹配您的 Timescale 服务。
实时迁移日志记录警告 WARNING: no tuple identifier for UPDATE in table
,当它无法在从源数据库收到 UPDATE
语句后确定应更新哪些特定行时,就会出现这种情况。当源数据库中接收 UPDATE
语句的表缺少 PRIMARY KEY
或 REPLICA IDENTITY
设置时,就会发生这种情况。为了使实时迁移成功复制 UPDATE
和 DELETE
语句,表必须具有 PRIMARY KEY
或 REPLICA IDENTITY
设置作为先决条件。
如果您的 PostgreSQL 表使用原生分区,在根(父)表上设置 REPLICA IDENTITY
不会自动将其应用于分区子表。您必须手动在每个分区子表上设置 REPLICA IDENTITY
。
实时迁移不支持从读或故障转移副本进行复制。您必须提供指向您的源数据库的直接连接字符串,以进行实时迁移。
实时迁移不支持连接池管理器。您必须提供指向您的源数据库和目标数据库的直接连接字符串,才能使实时迁移顺利运行。
不能,Timescale 云不能用作实时迁移的源数据库。
目前,实时迁移不允许排除模式或表以进行复制,但此功能预计将在未来的版本中添加。但是,可以使用 --skip-table-data
标志来跳过表数据,作为一种变通方法。有关更多信息,请参考 migrate
子命令下的帮助文本。
关键字