问题描述
在 Postgres 中,函数在创建时进行验证:例如,访问不存在的列会导致有用的错误,即使在函数运行之前也是如此。但是更改表并不能验证与函数定义的一致性,即删除某个函数使用的列不会导致错误。有没有办法重新运行在创建时已经应用于函数的相同验证,而无需删除和重新创建每个函数?
解决方法
没有内置的东西,但有一个扩展可以做到这一点:
来自项目的自述文件:
特点
- 检查嵌入式 SQL 中引用的数据库对象和类型的字段
- 使用正确类型的函数参数
- 未使用的变量和函数参数,未修改的 OUT 参数
- 部分死代码检测(由于 RETURN 命令)
- 检测到函数中缺少 RETURN 命令
- 尝试识别不需要的隐藏强制转换,这可能是性能问题,例如未使用的索引
- 可以收集函数使用的关系和函数
- 可以检查 EXECUTE stmt agaist SQL 注入漏洞