Chapter 48. PL/Python — Python Procedural Language

Table of Contents

48.1. Python 2 vs. Python 3
48.2. PL/Python Functions
48.3. Data Values
48.3.1. Data Type Mapping
48.3.2. Null, None
48.3.3. Arrays, Lists
48.3.4. Composite Types
48.3.5. Set-Returning Functions
48.4. Sharing Data
48.5. Anonymous Code Blocks
48.6. Trigger Functions
48.7. Database Access
48.7.1. Database Access Functions
48.7.2. Trapping Errors
48.8. Explicit Subtransactions
48.8.1. Subtransaction Context Managers
48.8.2. Older Python Versions
48.9. Transaction Management
48.10. Utility Functions
48.11. Environment Variables

The PL/Python procedural language allows Postgres Pro functions and procedures to be written in the Python language.

To install PL/Python in a particular database, use CREATE EXTENSION plpythonu (but see also Section 48.1).

Tip

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

PL/Python is only available as an untrusted language, meaning it does not offer any way of restricting what users can do in it and is therefore named plpythonu. A trusted variant plpython might become available in the future if a secure execution mechanism is developed in Python. The writer of a function in untrusted PL/Python must take care that the function cannot be used to do anything unwanted, since it will be able to do anything that could be done by a user logged in as the database administrator. Only superusers can create functions in untrusted languages such as plpythonu.

Note

The plpythonu/plpython2u and plpython3u languages are supported in Postgres Pro Enterprise. The corresponding extensions are supplied as separate pre-built packages postgrespro-ent-14-plpython and postgrespro-ent-14-plpython3, respectively (for the detailed installation instructions, see Chapter 17). To learn about the differences between the PL/Python language variants, see Section 48.1.