在 Postgres 中,如何在更改表后重新验证“类型检查”函数和过程?

问题描述

在 Postgres 中,函数在创建时进行验证:例如,访问不存在的列会导致有用的错误,即使在函数运行之前也是如此。但是更改表并不能验证与函数定义的一致性,即删除某个函数使用的列不会导致错误。有没有办法重新运行在创建时已经应用于函数的相同验证,而无需删除和重新创建每个函数

解决方法

没有内置的东西,但有一个扩展可以做到这一点:

plpgsql_check

来自项目的自述文件:

特点

  • 检查嵌入式 SQL 中引用的数据库对象和类型的字段
  • 使用正确类型的函数参数
  • 未使用的变量和函数参数,未修改的 OUT 参数
  • 部分死代码检测(由于 RETURN 命令)
  • 检测到函数中缺少 RETURN 命令
  • 尝试识别不需要的隐藏强制转换,这可能是性能问题,例如未使用的索引
  • 可以收集函数使用的关系和函数
  • 可以检查 EXECUTE stmt agaist SQL 注入漏洞