The PL/Python procedural language allows PostgreSQL functions to be written in the Python language.
The current version of PL/Python functions as a trusted language
only; access to the file system and other local resources is
disabled. Specifically, PL/Python uses the Python restricted
execution environment, further restricts it to prevent the use
of the file open
call, and allows
only modules from a specific list to be imported. Presently,
that list includes: array, bisect, binascii, calendar, cmath,
codecs, errno, marshal, math, md5, mpz, operator, pcre, pickle,
random, re, regex, sre, sha, string, StringIO, struct, time,
whrandom, and zlib.
In the current version, any database error encountered while running a PL/Python function will result in the immediate termination of that function by the server. It is not possible to trap error conditions using Python try ... catch constructs. For example, a syntax error in an SQL statement passed to the plpy.execute() call will terminate the function. This behavior may be changed in a future release.