PL/sh Procedural Language Handler for PostgreSQL
================================================

PL/sh is a procedural language handler for PostgreSQL that allows you
to write stored procedures in a shell of your choice.  For example,

CREATE FUNCTION concat(text, text) RETURNS text AS '
#!/bin/sh
echo "$1$2"
' LANGUAGE 'plsh';

The first line must be a #!-style line that indicates the shell to
use.  The rest of the function body will be executed by that shell in
a separate process. The arguments are available as $1, $2, etc., as
usual.  (This is the shell's syntax. If your shell uses something
different then that's what you need to use.)  The return value will
become what is printed to the standard output.  If anything is printed
to the standard error, then the function aborts with an error and the
message is printed.  If the script does not exit with status 0 then an
error is raised as well.

The shell script can do anything you want, but you can't access the
database.  Trigger functions are also possible, but they can't change
the rows.  Needless to say, this language should not be declared as
TRUSTED.

To build and install it, use this procedure: 

CPPFLAGS=-I/where/ever/pgsql/src/include ./configure --prefix=YOUR_CHOICE
make
make install

To declare the language in a database, use 

psql -d DBNAME -f PREFIX/share/pgplsh/createlang_pgplsh.sql

with a server running. To drop it, use droplang pgplsh in PostgreSQL
7.2 or later.

I'm interested if anyone is using this. 


Peter Eisentraut
<peter_e@gmx.net>
