内容提要
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扩展通常需要在服务器上进行安装,且可能涉及不受信的语言。