
# 全量同步失败报错，关键词"function \*\*\* does not exist"
#### 场景描述
全量同步期间DRS任务报错，同步日志界面提示：service DATAMOVE failed, cause by: apply event=\[type=table_structure, index=%s, schema_name=%s, object_name=%s\] occur error, msg=ERROR: function \*\*\* does not exist Hint: No function matches the given name and argument types. You might need to add explicit type casts.
#### 可能原因
目标库未提前创建表结构依赖的函数。DRS PostgreSQL-\>PostgreSQL表级同步场景下，不支持函数和插件对象的同步，所以需要手动在目标库创建表结构依赖的函数。
![](https://support.huaweicloud.com/trouble-drs/public_sys-resources/note_3.0-zh-cn.png)
可登录至目标库RDS for PostgreSQL的相应库（database），执行如下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';
```
#### 解决方案
缺少的函数可能属于某个插件，也可能是用户自建的函数。可按照如下步骤在源库检查函数的来源，并在目标库创建对应插件或者自建函数后，重试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任务。
 
