# Chapter 46. PL/Python — Python Procedural Language

Table of Contents

46.1. Python 2 vs. Python 3

46.2. PL/Python Functions

46.3. Data Values

46.3.1. Data Type Mapping

46.3.2. Null, None

46.3.3. Arrays, Lists

46.3.4. Composite Types

46.3.5. Set-Returning Functions

46.4. Sharing Data

46.5. Anonymous Code Blocks

46.6. Trigger Functions

46.7. Database Access

46.7.1. Database Access Functions

46.7.2. Trapping Errors

46.8. Explicit Subtransactions

46.8.1. Subtransaction Context Managers

46.8.2. Older Python Versions

46.9. Transaction Management

46.10. Utility Functions

46.11. Environment Variables

The PL/Python procedural language allows PostgreSQL functions and procedures to be written in the Python language (opens new window).

To install PL/Python in a particular database, use CREATE EXTENSION plpythonu (but see also Section 46.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

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.