数据复制服务 DRS-全量同步失败报错,关键词“function *** does not exist”:解决方案

时间:2025-02-12 15:11:56

解决方案

缺少的函数可能属于某个插件,也可能是用户自建的函数。可按照如下步骤在源库检查函数的来源,并在目标库创建对应插件或者自建函数后,重试DRS任务。

  1. 登录源库,执行如下SQL查询函数所属的插件,其中f_name为对应函数名称。

    select extname, nspname, proname,pg_get_function_arguments(c.oid) as funcargs from pg_extension e join pg_depend d on (d.refobjid=e.oid) join pg_proc c on (d.objid=c.oid) join pg_namespace n on c.pronamespace=n.oid where proname ='f_name';
    • 有查询结果,表示函数属于某个插件,结果中的extname字段即为插件名称,继续执行2
    • 无查询结果,表示函数不属于任何插件,为用户自建函数,执行3

  2. 如果函数属于某个插件,则在目标库RDS for PostgreSQL的管理页面中选择插件管理,安装对应的插件。
  3. 如果函数为用户自建函数,则在目标库创建与源库相同的函数,函数定义语句可参考如下SQL在源库执行的结果,其中f_name为对应函数名称。

    select n.nspname,p.proname,pg_get_functiondef(p.oid) as funcdef from pg_proc p left join pg_namespace n on p.pronamespace=n.oid where proname ='f_name';

  4. 重试DRS任务。
support.huaweicloud.com/trouble-drs/drs_13_0102.html