在PostgreSQL中,上层最令人称道的,莫过于支持hook的插件(extensions)机制了。
不仅在于实现整个数据库系统的解耦,更重要的,也激发了开源贡献者的集思广益。
俗话说,一流的厂商做接口,超一流的厂商做平台。
笔者在从事PG开发之前,也曾接触过chromium、openldap、openssl等产品。
很显然,chromium就是同样的插件机制。
包括最近入手使用的vscode工具,同样以丰富的插件集成俘获了Developers的芳心。
而openldap、openssl等虽然没有明显提及插件的概念,但不管是openldap丰富的参数配置,抑或是openssl开放的函数指针,无疑与插件的思想不谋而合。
再仔细想想,企鹅小程序、应用app,操作系统的外围......
形形色色的功能特性,都是万变不离其宗地围绕着某个“中心思想”来转动。
插件的逐步扩展,是产品的逐渐壮大的过程。
所谓开局一个鲲,成长靠吞噬,依托插件的发展,产品的场景适应性也在一步一步地滚雪球式成长。
堪称艺术!
我们知道,在postgresql中,插件的实现,无非就是函数指针和动态库的结合而已。
这在几乎大多数产品中均有体现。
至少,在作为C/C++后台研发的笔者看来,服务端程序少不了采纳这种思路。
例如,Linux中的PAM机制,也是如此。
PostgreSQL中的插件支持,除了官网介绍,或者也可简单看一下这里的罗列:
https://www.modb.pro/db/57986
从代码角度,也可窥见一斑。
另外,要理解PostgreSQL本身,从插件的实现反推过去,也不失为一种学习的过程。
比如监控数据库信息,比如查询页面校验值等,对当前DB的结构都是一种熟悉的策略。
本文标题大了一些,仅仅是从插件的实现和使用上,多一些对数据库的了解和思考。