digoal
2019-12-10
PostgreSQL , hook
很多人家里会加自来水的前置过滤器,在要加过滤器的地方切段水管,把过滤器装上后水通过过滤器再往下流。
hook 在PostgreSQL中也可以看作是一种内置的过滤器,但它是个空壳,过滤器里什么都没有,你可以实现这个hook,也就是往过滤器里加东西。
例如这个hook,当ExecutorFinish_hook什么都没有时,就是个空壳,你可以在外面实现这个空壳,让他变成有东西,那么hook的代码就会被执行。起到“过滤器”效果。
void
ExecutorFinish(QueryDesc *queryDesc)
{
if (ExecutorFinish_hook) // 如果定义了这个HOOK,那么跳转到如下执行。
(*ExecutorFinish_hook) (queryDesc);
else
standard_ExecutorFinish(queryDesc);
}
《PostgreSQL 数据库资源限制 + HOOK(limit guc) - 降低攻击伤害、自动SQL优化等》
《PostgreSQL 回收站功能 - 基于HOOK的recycle bin pgtrashcan》
https://www.dalibo.org/_media/hooks_in_postgresql2.pdf
您的愿望将传达给PG kernel hacker、数据库厂商等, 帮助提高数据库产品质量和功能, 说不定下一个PG版本就有您提出的功能点. 针对非常好的提议,奖励限量版PG文化衫、纪念品、贴纸、PG热门书籍等,奖品丰富,快来许愿。开不开森.