You need to enable JavaScript to run this app.
文档中心
数据库传输服务

数据库传输服务

复制全文
下载 pdf
最佳实践
手动清理 PostgreSQL 数据传输任务的自建资源
复制全文
下载 pdf
手动清理 PostgreSQL 数据传输任务的自建资源
在使用火山引擎 DTS 执行 PostgreSQL 数据库数据迁移或数据同步后,如果 DTS 异常终止任务后,可通过本文介绍的方法在 PostgreSQL 数据库中手动清理因迁移或同步任务创建的资源。​
背景信息​
火山引擎 DTS 在执行 PostgreSQL 数据库数据迁移或数据同步时,自动在 PostgreSQL 源库中创建了以下 5 类资源。​
说明​
下表命名格式列中的 {task_id} 占位符即 DTS 任务 ID。​
​
DTS 自建资源​
在数据传输中的用途​
命名格式​
事件触发器(Event Trigger)​
用于捕获 DDL(Data Definition Language)操作,例如 CREATE TABLE , ALTER TABLE 等。DTS 创建两个事件触发器,分别为在 DDL 事件发生前触发和在 DDL 事件发生后触发。​
dts_ddl_command_trigger_{task_id} 和 dts_publication_ddl_command_trigger_{task_id}​
函数(Function)​
被事件触发器调用,用于将 DDL 事件的详细信息记录到 DTS 创建的表中。​
public.dts_ddl_command_func_{task_id}() 和 public.dts_publication_ddl_command_func_{task_id}()​
表(Table)​
用于存储 DDL 事件的详细信息。​
public.dts_ddl_command_table_{task_id}​
发布(Publication)​
用来定义哪些表的变更(INSERT, UPDATE, DELETE, TRUNCATE)需要通过逻辑复制发送给订阅端。​
dts_logical_replica_{task_id}​
复制槽(Replication Slot)​
逻辑复制槽,确保在订阅端消费数据之前,数据库不会删除相关的 WAL(Write-Ahead Logging)日志。​
复制槽最核心的资源,如果长时间不清理,可能导致数据库磁盘空间被占满。​
dts_logical_replica_{task_id}​
​
正常情况下,在数据传输任务结束后,DTS 会在源库中自动删除以上创建的 5 类资源;但在以下场景中,DTS 无法自动删除以上 5 类资源,此时则需要您手动清理以上资源。​
​
场景​
场景说明​
执行动作​
DTS 无法连接源库​
在火山引擎 DTS 正常结束任务前,DTS 因其它原因异常无法连接 PostgreSQL 源数据库,如在终止 DTS 任务前,将 DTS 从源数据库白名单中移除,此次 DTS 无法连接 PostgreSQL 源数据库,将无法删除以上 5 类资源。​
在源库中手动删除事件触发器(Event Trigger)、函数(Function)、表(Table)、发布(Publication)和复制槽(Replication Slot)。​
将 DTS 源库中的自建资源迁移到目标库​
在火山引擎 DTS 正常结束任务前,如果使用第三方迁移工具,将 PostgreSQL 源数据库中的数据(包括 DTS 自动创建的以上 5 类资源)迁移到目标端数据库。此时,也需要在目标端手动清理以上 5 类资源。​
在目标库中手动删除事件触发器(Event Trigger)、函数(Function)、表(Table)、发布(Publication)和复制槽(Replication Slot)。​
​
前提条件​
  • 已在火山引擎 DTS 中启动 PostgreSQL 数据库数据迁移或数据同步任务,且 DTS 无法自动删除 PostgreSQL 源或目标数据库中自建资源(事件触发器(Event Trigger)、函数(Function)、表(Table)、发布(Publication)和复制槽(Replication Slot))。​
  • 您已拥有 PostgreSQL 数据库的 Superuse 权限。​
注意事项​
  • 在 DTS 传输任务异常结束后,如果不清理 DTS 自建资源,会导致 DTS 自建资源中的数据越来越多,占用数据库空间,影响数据库性能。​
  • 在清理 DTS 自建资源时,务必按照清理步骤中的顺序,依次删除事件触发器(Event Trigger)> 函数(Function)> 表(Table)> 发布(Publication)> 复制槽(Replication Slot)。​
  • 当删除资源顺序有误,导致数据库无法正常执行 DDL 操作时,执行 DROP EVENT TRIGGER 命令,恢复数据库 DDL 操作的可用性。​
清理步骤​
注意​
您需要按顺序依次删除事件触发器(Event Trigger)> 函数(Function)> 表(Table)> 发布(Publication)> 复制槽(Replication Slot)。​
  1. 登录 PostgreSQL 数据库(源端或目标端)。​
  1. 切换至待迁移的数据库。​
  1. 删除事件触发器(Event Trigger)。​
说明​
下面执行命令中的 {task_id} 占位符请替换为 DTS 的任务 ID。​
  1. 执行以下命令检查是否存在目标事件触发器。​
  • ​
    SELECT evtname FROM pg_event_trigger WHERE evtname IN ('dts_ddl_command_trigger_{task_id}', 'dts_publication_ddl_command_trigger_{task_id}');​
    ​
  1. 如果存在,执行以下命令删除目标事件触发器。​
  • ​
    DROP EVENT TRIGGER IF EXISTS dts_ddl_command_trigger_{task_id};​
    DROP EVENT TRIGGER IF EXISTS dts_publication_ddl_command_trigger_{task_id};​
    ​
  1. 删除函数(Function)。​
  1. 执行以下命令检查是否存在目标函数。​
  • ​
    SELECT proname FROM pg_proc WHERE proname IN ('dts_ddl_command_func_{task_id}', 'dts_publication_ddl_command_func_{task_id}');​
    ​
  1. 如果存在,执行以下命令删除目标函数。​
  • ​
    DROP FUNCTION IF EXISTS public.dts_ddl_command_func_{task_id}();​
    DROP FUNCTION IF EXISTS public.dts_publication_ddl_command_func_{task_id}();​
    ​
  1. 删除表(Table)​
  1. 执行以下命令检查是否存在目标表。​
  • ​
    SELECT to_regclass('public.dts_ddl_command_table_{task_id}');​
    ​
  1. 如果存在,执行以下命令删除目标表。​
  • ​
    DROP TABLE IF EXISTS public.dts_ddl_command_table_{task_id};​
    ​
  1. 删除发布(Publication)​
  1. 执行以下命令检查是否存在目标发布。​
  • ​
    SELECT pubname FROM pg_publication WHERE pubname = 'dts_logical_replica_{task_id}';​
    ​
  1. 如果存在,执行以下命令删除目标发布。​
  • ​
    DROP PUBLICATION IF EXISTS dts_logical_replica_{task_id};​
    ​
  1. 删除复制槽(Replication Slot)​
  1. 执行以下命令检查是否存在目标复制槽。​
  • ​
    SELECT slot_name FROM pg_replication_slots WHERE slot_name = 'dts_logical_replica_{task_id}';​
    ​
  1. 如果存在,在确保没有客户端连接目标复制槽情况下,执行以下命令删除目标复制槽。​
说明​
如果有客户端正连接着目标复制槽,先中断复制槽连接,否则可能删除失败。​
  • ​
    SELECT pg_drop_replication_slot('dts_logical_replica_{task_id}');​
    ​
常见问题​
Q1:DTS 任务结束后,如果 DTS 没有自动清理为传输任务创建的事件触发器、函数、表、发布和逻辑复制槽资源,必须要手动清理吗?​
  • A:是的,必须要手动清理 DTS 自建的以上 5 类资源。如果不手动清理以上资源,这些资源会在数据库中一直运行。​
  • 发布和逻辑复制槽会一直记录数据库中新增的数据日志,随着时间的增长,发布和逻辑复制槽中的数据量越来越大,会占用大量存储空间,并影响数据库性能。​
  • 触发器、函数和表:触发器会一直捕获 DDL 执行事件,并通过函数将 DDL 执行数据记录到表中。​
Q2:在手动清理 DTS 自建资源时,如果没有按照清理顺序删除资源,会有什么影响?​
  • 如背景信息中所述,DTS 自建资源之间存在依赖关系,如果删除资源的顺序有误,可能会出现报错,并影响数据库业务运行。请务必按照清理步骤删除 DTS 自建资源。​
最近更新时间:2026.09.02 11:04:03
这个页面对您有帮助吗?
有用
有用
无用
无用