Postgres的受信语言扩展

Postgres的受信语言扩展

💡 原文英文,约1100词,阅读约需4分钟。
📝

内容提要

AWS团队开发了“受信语言扩展”(TLE),解决了许多云服务提供商不允许用户在数据库中安装Postgres扩展的问题。TLE使用受信语言编写,简化了扩展的安装过程,促进了开源开发者的协作与创新。

🔎

延伸解读

TLE 如何绕过云服务商的扩展安装限制

许多云服务商如 Supabase 和 AWS RDS 出于安全考虑,不允许用户随意安装 Postgres 扩展,尤其是用 C 等非受信语言编写的扩展,因为它们可能访问数据库进程内存,相当于超级用户权限。TLE 用受信语言编写,不触碰系统底层,因此云服务商可以放心允许用户通过数据库客户端直接安装,无需文件系统权限。这解决了扩展在云上难以使用的核心痛点。

受信语言与不受信语言的关键区别

Postgres 扩展可以用不同语言编写。C 语言编写的扩展会被动态链接到数据库进程,能访问内存和文件系统,属于不受信语言,安装需要服务器文件系统权限。而 SQL、pl/pgsql、plv8、pl/perl、pl/tcl 等受信语言遵循 Postgres 安全规则,不能越权操作。TLE 必须用受信语言编写,因此无法包含 C 代码,但已有许多扩展用受信语言实现,未来 pl/rust 等高性能受信语言将带来更多可能。

TLE 对开源协作和扩展分发的意义

传统上,云服务商对扩展审核保守,新扩展很难快速被采用,这拖慢了开源创新。TLE 让开发者可以自行创建、安装和分享扩展,无需等待云服务商批准。AWS 和 Supabase 合作在各自平台提供 pg_tle,统一了标准包平台,扩大了扩展的覆盖范围。开发者还能通过 dbdev 包注册表,用 SQL 从 REST API 安装 TLE,进一步简化了分发流程。

❓

Q&A

什么是受信语言扩展(TLE)?

受信语言扩展(TLE)是用受信语言编写的Postgres扩展,可以在任何安装了pg_tle扩展的Postgres提供商中直接安装,无需在服务器文件系统上安装。

TLE如何简化Postgres扩展的安装过程?

TLE允许用户通过数据库客户端直接安装扩展,使用函数pgtle.install_extension(),而不需要访问服务器文件系统。

为什么许多云服务提供商不允许安装Postgres扩展?

许多云服务提供商出于安全考虑,不允许用户安装Postgres扩展,因为这些扩展可能需要访问外部库并与Postgres内部交互。

受信语言扩展对开源开发者有什么影响?

受信语言扩展为开源开发者提供了机会,可以快速创建、安装和共享代码,而无需等待云服务提供商的批准,从而促进了创新和协作。

pg_tle在哪些平台上可用?

pg_tle在Supabase和Amazon RDS上可用,支持Postgres 14.5及更高版本。

TLE与传统Postgres扩展有什么不同?

TLE不需要在服务器文件系统上安装,而传统Postgres扩展通常需要在服务器上进行安装,且可能涉及不受信的语言。

🏷️

标签

➡️

继续阅读