避免用户错误使用到pg插件

基本概念 这里是融合版的一个需求,属于兼容性需求类别,主要实现的是一个黑名单,是要把一个列表中的多个插件不允许在MSSQL兼容安装包中出现,或只能在5432端口(PG模式)中使用,不能在1433端口(MSSQL模式)中使用。 初步分析 根据需求列表,可以基本将需要修改的插件分为三类: 禁止在双端口安装使用; 在5432端口允许使用,1433端口禁止安装使用; 双端口都允许使用; 其中,需求描述特别提到,允许在编译阶段进行修改,由此可以对应的提出三类插件的修改方案: 在编译阶段不安装,也就是在contrib/Makefile中的SUBDIR安装插件,删除这些不允许在双端口安装的插件; 在hooks.c中增加一个名单,名单中包含这些允许在5432不允许在1433安装的插件,首先检测当前dialect是否为tsql,如果为tsql,检查是否是T_CreExtensionStmt,如果是则检查插件名单是否在这个名单之内,如果没有则放行,有则报错; 不做任何处理; 理论上,以上方案实施后,能够达到双端口不可用则直接无法找到插件,用户自行安装则不保证可能出现的任何问题;对于5432可用1433不可用,会进行报错;其他类型不做处理;应该可以达到需求描述的目的实现; 边界考虑 由于删除了某些插件编译且对某些插件在一定场景进行了屏蔽,考虑数据库升级场景,如果以前使用过此插件,现在进行了屏蔽,可能导致升级失败; 灵活性 现在的屏蔽方式是使用直接修改编译文件与硬编码名单的方式实现,如果在一个版本内,由于某些特殊原因想启用已屏蔽的插件,则在当前版本是无法实现的。如果将名单作成guc参数,则可以提供灵活性,但是一旦被手动篡改,则无法预料可能产生的问题;

February 25, 2026 · 1 min · 16 words · Me
心情不好的时候可以点一下 🐱
×
🤖 Doubao AI ×
Hi! 我是你的技术助手。关于代码、架构或 Bug,随时问我!🚀