内容提要
这篇文章提出了关于Postgres扩展命名空间的更新建议,建议引入一个新的字段来唯一标识扩展项目和其所有部分。作者认为这样的改变有很多好处,包括与现有的元数据规范兼容、增加额外的元数据以帮助用户评估扩展的质量、为自动索引扩展创造了模式等。作者希望得到读者的反馈,以便尽快确定这个决定并开始开发。
延伸解读
命名空间冲突的现状与挑战
当前Postgres扩展的唯一性由控制文件名决定,同一集群内不能有同名扩展。PGXN注册表也采用先到先得的方式,第一个发布者拥有名称所有权。这种模式虽然简单,但限制了生态发展,尤其当不同开发者希望使用相同扩展名时,无法共存。文章指出,其他注册表如trunk和pgxman则通过分发名称来定义扩展,这为解决冲突提供了不同思路。
module_path方案如何工作
提案建议在PGXN元数据中添加module_path字段,采用Go风格的模块路径或URI来唯一标识扩展项目。例如,两个都提供名为pair扩展的分发,可以通过不同的module_path区分。安装时,PGXN客户端会提示用户选择具体来源,并防止安装冲突扩展。该方案保留了provides对象,但扩展名不再全局唯一,而是与module_path组合唯一。
潜在好处与未来可能性
这一改动与现有v1元数据规范兼容,无需数据迁移。它放宽了命名空间限制,同时通过module_path提供了额外元数据,帮助用户判断扩展来源和质量。此外,它为自动索引扩展创造了模式:如果用户请求安装一个PGXN没有的扩展,系统可以尝试从指定仓库查找META.json并索引。长远看,Postgres核心也可能采纳这种更灵活的命名空间方案。
Q&A
大卫·惠勒提出了什么关于Postgres扩展命名空间的建议?
他建议在PGXN元数据规范中添加一个新字段module_path,以唯一标识扩展项目及其所有部分。
为什么需要引入module_path字段?
引入module_path字段可以帮助用户区分同名扩展,避免冲突,并增加额外的元数据以评估扩展质量。
目前Postgres扩展的唯一性是如何定义的?
扩展的唯一性目前有三种方式:在单个Postgres集群中、PGXN注册表中和其他注册表通过分发名称定义扩展。
这个提议有哪些潜在的好处?
提议的好处包括与现有元数据规范兼容、增加额外的元数据帮助用户评估扩展质量,以及为自动索引扩展创造模式等。
作者希望从读者那里得到什么反馈?
作者希望得到读者的反馈,以便尽快确定这个决定并开始开发。
如何通过module_path解决扩展名称冲突?
通过提供module_path,用户可以在上传扩展时区分同名扩展,从而避免名称冲突。