plx 是一个 PostgreSQL 扩展,让你可以用熟悉的语言方言编写存储函数和触发器。执行 CREATE FUNCTION 时,plx 会把函数体转换成 PL/pgSQL,并将生成的 PL/pgSQL 存入 pg_proc.prosrc。运行时仍由 PostgreSQL 自带的 PL/pgSQL 解释器执行,不会在后端加载额外语言运行时,也不需要在生产环境运行新的服务。
目前可用的方言包括 Ruby、PHP、JavaScript、Python、COBOL、Oracle PL/SQL、TypeScript、Transact-SQL 和 Go。所有 PL/pgSQL 语句类型都可以从这些方言访问,具体支持矩阵见 doc/PARITY.md。语言名称都带有 plx 前缀,因此可以与原生 PL/Ruby、PL/PHP 等语言共存。
PostgreSQL 鼓励把逻辑靠近数据执行,例如触发器、约束、返回集合的函数和游标。标准方式是使用 PL/pgSQL,但很多应用开发者并不熟悉它的语法。常见替代方案是使用 plpython3u 或 plperlu 等不受信任过程语言,但它们会把完整语言解释器加载进后端,通常需要超级用户权限,并在 SPI 边界进行数据转换。
plx 的取向是:新的语言表层不必带来新的执行引擎。它只改变编写语法,不改变数据库实际执行的内容。翻译成本发生在 CREATE FUNCTION 时,而不是每次调用时;生成的 PL/pgSQL 可见、可检查、可随 pg_dump 导出,也便于审查。
项目地址:https://github.com/commandprompt/plx 构造支持矩阵:https://github.com/commandprompt/plx/blob/master/doc/PARITY.md