Chapter 40. PL/Python -
Python Procedural Language

The PL/Python procedural
language allows PostgreSQL
functions to be written in the Python language.

To install PL/Python in a particular database, use createlang plpythonu dbname.

Tip: If a language is installed into template1, all subsequently created databases
will have the language installed automatically.

As of PostgreSQL 7.4,
PL/Python is only available as an "untrusted" language (meaning it does not offer
any way of restricting what users can do in it). It has therefore
been renamed to plpythonu. The trusted
variant plpython may become available
again in future, if a new secure execution mechanism is developed
in Python.

Note: Users of source packages must specially
enable the build of PL/Python during the installation
process. (Refer to the installation instructions for more
information.) Users of binary packages might find PL/Python
in a separate subpackage.

If you do not provide a return value, Python returns the
default None. The language module
translates Python's None into the SQL
null value.

The PostgreSQL function
parameters are available in the global args list. In the myfunc example, args[0] contains whatever was passed in as the
text argument. For myfunc2(text,
integer), args[0] would contain
the text argument and args[1] the integer
argument.

The global dictionary SD is
available to store data between function calls. This variable
is private static data. The global dictionary GD is public data, available to all Python
functions within a session. Use with care.

Each function gets its own execution environment in the
Python interpreter, so that global data and function arguments
from myfunc are not available to
myfunc2. The exception is the
data in the GD dictionary, as
mentioned above.