plsh
Overview
| ID | Extension | Bin | Lib | Load | Create | Trust | Reloc | Schema |
|---|---|---|---|---|---|---|---|---|
| 3080 | plsh | No | Yes | No | Yes | No | Yes | - |
Version
| Type | Repo | Version | PG Ver | Package | Deps |
|---|---|---|---|---|---|
| EXT | PGDG | 1.20220917 | 1817161514 | plsh | - |
| RPM | PGDG | 1.20220917 | 1817161514 | plsh_$v | - |
| DEB | PGDG | 1.20220917 | 1817161514 | postgresql-$v-plsh | - |
Install
You can install plsh directly. First, make sure the PGDG repository is added and enabled:
Install the extension using pig or apt/yum/dnf:
Create Extension:
Usage
plsh allows writing PostgreSQL functions as shell scripts. The function body must start with a shebang line specifying the interpreter.
Create Shell Functions
Argument Passing
Function arguments are passed as positional shell variables ($1, $2, etc.):
Return Values
- Standard output becomes the return value (trailing newlines stripped)
- Empty output returns NULL
- Standard error output causes the function to abort with that error message
- Non-zero exit status triggers an error
Database Access
Direct SPI access is not available, but psql can be used since libpq environment variables are preconfigured:
Trigger Functions
Trigger context is available via environment variables:
| Variable | Description |
|---|---|
PLSH_TG_NAME | Trigger name |
PLSH_TG_WHEN | BEFORE, INSTEAD OF, or AFTER |
PLSH_TG_LEVEL | ROW or STATEMENT |
PLSH_TG_OP | DELETE, INSERT, UPDATE, or TRUNCATE |
PLSH_TG_TABLE_NAME | Target table name |
PLSH_TG_TABLE_SCHEMA | Target table schema |
Event trigger variables: PLSH_TG_EVENT, PLSH_TG_TAG.
Inline Execution
Security
plsh should not be declared as TRUSTED since shell scripts have full OS-level access under the PostgreSQL user. Only superusers should create plsh functions.
Was this page helpful?
Thanks—your feedback helps us improve this page.
What got in the way? (optional)