PL Matrix
From PostgreSQL wiki
Jump to navigationJump to searchThis page provides a list of known Procedural Language handlers for PostgreSQL.
Language | Handler | Status | Availability | Named Parameters? | OUT Parameters? | (Un)Trusted | Notes |
---|---|---|---|---|---|---|---|
C# | PL/dotnet | Beta | pl/dotnet | yes | yes | Untrusted | install with CREATE EXTENSION |
F# | PL/dotnet | Beta | pl/dotnet | yes | yes | Untrusted | install with CREATE EXTENSION |
Haskell | PL/Haskell | Production | PL/Haskell | ? | ? | Trusted and Untrusted | |
Java | PL/Java | Production | PL/Java | yes | partial (no INOUT) | Trusted and Untrusted, both configurable | install with CREATE EXTENSION |
JavaScript | PL/v8 | Production | pl/v8js | yes | yes | Trusted | install with CREATE EXTENSION |
Julia | PL/Julia | ? | pl/julia | ? | ? | Untrusted | install with CREATE EXTENSION |
LOLCODE | PL/lolcode | Alpha | pl/lolcode | yes | ? | ? | |
Lua | pl/lua (ng) | Production | pl/lua (ng) | yes | yes | Trusted and Untrusted | install with CREATE EXTENSION |
Perl | PL/Perl | Production | in core | no | no | Trusted and Untrusted | |
PHP | PL/PHP | Beta | pl/php | Yes | ? | ? | |
PL/pgSQL | PL/pgSQL | Production | in core | yes | yes | Trusted | compiled by default |
Python | PL/Python | Production | in core | yes | support for one OUT parameter from 8.4, multiple from 9.1 | Untrusted | |
R | PL/R | Production | PL/R | yes | no | Untrusted | |
Ruby | PL/Ruby | ? | pl/ruby | ? | ? | ? | |
Rust | PL/Rust | Production | PL/Rust | yes | no | Trusted and Untrusted | install with CREATE EXTENSION |
Scheme | PL/scheme | Unmaintained | pl/scheme | yes | yes | Untrusted | |
Shell | PL/sh | Production | PL/sh | no (not useful) | no | Untrusted necessarily | |
SQL | None | Production | in core | yes (version 9.2+) | yes | Trusted | available by default |
Tcl | PL/Tcl | Production | in core | no | no | Trusted and Untrusted | |
XSLT | PL/XSLT | Alpha | pl/xslt | yes | no | Untrusted | install with CREATE EXTENSION |
Note: All languages are allowed to use parameter names in the function parameter list declaration. The Named Parameters column indicates if the body of the function can refer to the parameters by those names, or whether it has to use a notation such as $1, $2, etc.
Note: All languages support parameters that are explicitly marked as IN parameters. Unless otherwise specified, languages that support OUT parameters also support INOUT parameters.