<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>Extension on Kernel Notes</title><link>https://my-blog.j8465383071.workers.dev/tags/extension/</link><description>Recent content in Extension on Kernel Notes</description><generator>Hugo -- 0.147.7</generator><language>zh-cn</language><lastBuildDate>Wed, 25 Feb 2026 10:15:33 +0800</lastBuildDate><atom:link href="https://my-blog.j8465383071.workers.dev/tags/extension/index.xml" rel="self" type="application/rss+xml"/><item><title>避免用户错误使用到pg插件</title><link>https://my-blog.j8465383071.workers.dev/posts/database/forbid-extension/</link><pubDate>Wed, 25 Feb 2026 10:15:33 +0800</pubDate><guid>https://my-blog.j8465383071.workers.dev/posts/database/forbid-extension/</guid><description>&lt;h2 id="基本概念">基本概念&lt;/h2>
&lt;p>这里是融合版的一个需求，属于兼容性需求类别，主要实现的是一个黑名单，是要把一个列表中的多个插件不允许在MSSQL兼容安装包中出现，或只能在5432端口（PG模式）中使用，不能在1433端口（MSSQL模式）中使用。&lt;/p>
&lt;h2 id="初步分析">初步分析&lt;/h2>
&lt;p>根据需求列表，可以基本将需要修改的插件分为三类：&lt;/p>
&lt;ul>
&lt;li>禁止在双端口安装使用；&lt;/li>
&lt;li>在5432端口允许使用，1433端口禁止安装使用；&lt;/li>
&lt;li>双端口都允许使用；&lt;/li>
&lt;/ul>
&lt;p>其中，需求描述特别提到，允许在编译阶段进行修改，由此可以对应的提出三类插件的修改方案：&lt;/p>
&lt;ul>
&lt;li>在编译阶段不安装，也就是在contrib/Makefile中的SUBDIR安装插件，删除这些不允许在双端口安装的插件；&lt;/li>
&lt;li>在hooks.c中增加一个名单，名单中包含这些允许在5432不允许在1433安装的插件，首先检测当前dialect是否为tsql，如果为tsql，检查是否是T_CreExtensionStmt，如果是则检查插件名单是否在这个名单之内，如果没有则放行，有则报错；&lt;/li>
&lt;li>不做任何处理；&lt;/li>
&lt;/ul>
&lt;p>理论上，以上方案实施后，能够达到双端口不可用则直接无法找到插件，用户自行安装则不保证可能出现的任何问题；对于5432可用1433不可用，会进行报错；其他类型不做处理；应该可以达到需求描述的目的实现；&lt;/p>
&lt;h2 id="边界考虑">边界考虑&lt;/h2>
&lt;ul>
&lt;li>由于删除了某些插件编译且对某些插件在一定场景进行了屏蔽，考虑数据库升级场景，如果以前使用过此插件，现在进行了屏蔽，可能导致升级失败；&lt;/li>
&lt;/ul>
&lt;h2 id="灵活性">灵活性&lt;/h2>
&lt;ul>
&lt;li>现在的屏蔽方式是使用直接修改编译文件与硬编码名单的方式实现，如果在一个版本内，由于某些特殊原因想启用已屏蔽的插件，则在当前版本是无法实现的。如果将名单作成guc参数，则可以提供灵活性，但是一旦被手动篡改，则无法预料可能产生的问题；&lt;/li>
&lt;/ul></description></item></channel></rss>