plsh
PL/sh 程序语言
概览
| ID | 扩展名 | Bin | Lib | Load | Create | Trust | Reloc | 模式 |
|---|---|---|---|---|---|---|---|---|
| 3080 | plsh | 否 | 是 | 否 | 是 | 否 | 是 | - |
版本
| 类型 | 仓库 | 版本 | PG 大版本 | 包名 | 依赖 |
|---|---|---|---|---|---|
| EXT | PGDG | 1.20220917 | 1817161514 | plsh | - |
| RPM | PGDG | 1.20220917 | 1817161514 | plsh_$v | - |
| DEB | PGDG | 1.20220917 | 1817161514 | postgresql-$v-plsh | - |
安装
您可以直接安装 plsh 扩展包的预置二进制包,首先确保 PGDG 仓库已经添加并启用:
BASH
使用 pig 或者是 apt/yum/dnf 安装扩展:
安装
BASH
pig
BASH
dnf
BASH
apt
BASH
创建扩展:
SQL
用法
plsh 允许将 PostgreSQL 函数编写为 Shell 脚本。函数体必须以 shebang 行开头,指定解释器。
SQL
创建 Shell 函数
SQL
参数传递
函数参数作为位置 Shell 变量($1、$2 等)传递:
SQL
返回值
- 标准输出成为返回值(尾部换行符被去除)
- 空输出返回 NULL
- 标准错误输出会导致函数中止,并将其作为错误消息
- 非零退出状态会触发错误
SQL
数据库访问
不支持直接 SPI 访问,但由于 libpq 环境变量已预配置,可以使用 psql:
SQL
触发器函数
触发器上下文通过环境变量提供:
| 变量 | 说明 |
|---|---|
PLSH_TG_NAME | 触发器名称 |
PLSH_TG_WHEN | BEFORE、INSTEAD OF 或 AFTER |
PLSH_TG_LEVEL | ROW 或 STATEMENT |
PLSH_TG_OP | DELETE、INSERT、UPDATE 或 TRUNCATE |
PLSH_TG_TABLE_NAME | 目标表名 |
PLSH_TG_TABLE_SCHEMA | 目标表所在模式 |
事件触发器变量:PLSH_TG_EVENT、PLSH_TG_TAG。
内联执行
SQL
安全性
plsh 不应声明为 TRUSTED,因为 Shell 脚本在 PostgreSQL 用户权限下具有完全的操作系统级访问权限。只有超级用户应创建 plsh 函数。