plluau
Lua 程序语言(不受信任的)
概览
| 扩展包名 | 版本 | 分类 | 许可证 | 语言 |
|---|---|---|---|---|
pllua | 2.0.12 | LANG | MIT | C |
| ID | 扩展名 | Bin | Lib | Load | Create | Trust | Reloc | 模式 |
|---|---|---|---|---|---|---|---|---|
| 3020 | pllua | 否 | 是 | 否 | 是 | 否 | 否 | pg_catalog |
| 3021 | hstore_pllua | 否 | 是 | 否 | 是 | 否 | 是 | - |
| 3030 | plluau | 否 | 是 | 否 | 是 | 否 | 否 | pg_catalog |
| 3031 | hstore_plluau | 否 | 是 | 否 | 是 | 否 | 是 | pg_catalog |
| 相关扩展 | plperlu plpgsql plpython3u plv8 pljava pltclu |
|---|---|
| 下游依赖 | hstore_plluau |
missing pg12-15 on el.aarch64
版本
| 类型 | 仓库 | 版本 | PG 大版本 | 包名 | 依赖 |
|---|---|---|---|---|---|
| EXT | PGDG | 2.0.12 | 1817161514 | pllua | - |
| RPM | PGDG | 2.0.12 | 1817161514 | pllua_$v | - |
| DEB | PGDG | 2.0.12 | 1817161514 | postgresql-$v-pllua | - |
| OS / PG | PG18 | PG17 | PG16 | PG15 | PG14 |
|---|---|---|---|---|---|
| el8.x86_64 | PGDG MISS | PGDG 2.0.12 | PGDG 2.0.12 | PGDG 2.0.11 | PGDG 2.0.11 |
| el8.aarch64 | PGDG MISS | PGDG 2.0.12 | PGDG 2.0.12 | PGDG MISS | PGDG MISS |
| el9.x86_64 | PGDG MISS | PGDG 2.0.12 | PGDG 2.0.12 | PGDG 2.0.11 | PGDG 2.0.11 |
| el9.aarch64 | PGDG MISS | PGDG 2.0.12 | PGDG 2.0.12 | PGDG MISS | PGDG MISS |
| el10.x86_64 | PGDG MISS | PGDG 2.0.12 | PGDG 2.0.12 | PGDG 2.0.12 | PGDG 2.0.12 |
| el10.aarch64 | PGDG MISS | PGDG 2.0.12 | PGDG 2.0.12 | PGDG 2.0.12 | PGDG 2.0.12 |
| d12.x86_64 | PGDG 2.0.12 | PGDG 2.0.12 | PGDG 2.0.12 | PGDG 2.0.12 | PGDG 2.0.12 |
| d12.aarch64 | PGDG 2.0.12 | PGDG 2.0.12 | PGDG 2.0.12 | PGDG 2.0.12 | PGDG 2.0.12 |
| d13.x86_64 | PGDG 2.0.12 | PGDG 2.0.12 | PGDG 2.0.12 | PGDG 2.0.12 | PGDG 2.0.12 |
| d13.aarch64 | PGDG 2.0.12 | PGDG 2.0.12 | PGDG 2.0.12 | PGDG 2.0.12 | PGDG 2.0.12 |
| u22.x86_64 | PGDG 2.0.12 | PGDG 2.0.12 | PGDG 2.0.12 | PGDG 2.0.12 | PGDG 2.0.12 |
| u22.aarch64 | PGDG 2.0.12 | PGDG 2.0.12 | PGDG 2.0.12 | PGDG 2.0.12 | PGDG 2.0.12 |
| u24.x86_64 | PGDG 2.0.12 | PGDG 2.0.12 | PGDG 2.0.12 | PGDG 2.0.12 | PGDG 2.0.12 |
| u24.aarch64 | PGDG 2.0.12 | PGDG 2.0.12 | PGDG 2.0.12 | PGDG 2.0.12 | PGDG 2.0.12 |
安装
您可以直接安装 pllua 扩展包的预置二进制包,首先确保 PGDG 仓库已经添加并启用:
pig repo add pgdg -u # 添加 PGDG 仓库并更新缓存
使用 pig 或者是 apt/yum/dnf 安装扩展:
pig install pllua; # 当前活跃 PG 版本安装
pig ext install -y pllua -v 18 # PG 18
pig ext install -y pllua -v 17 # PG 17
pig ext install -y pllua -v 16 # PG 16
pig ext install -y pllua -v 15 # PG 15
pig ext install -y pllua -v 14 # PG 14
dnf install -y pllua_18 # PG 18
dnf install -y pllua_17 # PG 17
dnf install -y pllua_16 # PG 16
dnf install -y pllua_15 # PG 15
dnf install -y pllua_14 # PG 14
apt install -y postgresql-18-pllua # PG 18
apt install -y postgresql-17-pllua # PG 17
apt install -y postgresql-16-pllua # PG 16
apt install -y postgresql-15-pllua # PG 15
apt install -y postgresql-14-pllua # PG 14
创建扩展:
CREATE EXTENSION plluau;
用法
plluau 是 pllua 的不可信变体,允许 Lua 函数访问文件系统、加载任意模块,以及执行在可信版本中受限的操作。
CREATE EXTENSION plluau;
创建函数
CREATE FUNCTION read_file(path text) RETURNS text LANGUAGE plluau AS $$
local f = io.open(path, "r")
if f then
local content = f:read("*a")
f:close()
return content
end
return nil
$$;
与 pllua(可信版本)的区别
| 功能 | pllua(可信) | plluau(不可信) |
|---|---|---|
| 文件 I/O | 受限 | 完全访问 |
| 模块加载 | 仅白名单 | 无限制 |
| 操作系统访问 | 否 | 是 |
| 适用于 | 用户自定义函数 | 管理员/超级用户函数 |
与 pllua 相同的 API
plluau 共享与 pllua 相同的 SPI 接口、触发器支持、集合返回函数和数据类型处理。所有 SPI 函数(spi.execute、spi.prepare、spi.rows)、基于协程的集合返回以及触发器函数的工作方式完全相同。
CREATE FUNCTION run_command(cmd text) RETURNS text LANGUAGE plluau AS $$
local handle = io.popen(cmd)
local result = handle:read("*a")
handle:close()
return result
$$;
初始化
通过 GUC 参数配置(仅限超级用户):
SET pllua.on_untrusted_init = 'myvar = {}';
由于 plluau 提供的访问权限不受限制,只有超级用户才能创建 plluau 函数。