Redrock Postgres Search Chinese
Version: 9.3 / 9.4 / 9.5 / 9.6 / 10 / 11 / 12 / 13 / 14

Chapter 45. PL/Python - Python Procedural Language

Table of Contents

45.1. Python 2 vs. Python 3
45.2. PL/Python Functions
45.3. Data Values
45.3.1. Data Type Mapping
45.3.2. Null, None
45.3.3. Arrays, Lists
45.3.4. Composite Types
45.3.5. Set-returning Functions
45.4. Sharing Data
45.5. Anonymous Code Blocks
45.6. Trigger Functions
45.7. Database Access
45.7.1. Database Access Functions
45.7.2. Trapping Errors
45.8. Explicit Subtransactions
45.8.1. Subtransaction Context Managers
45.8.2. Older Python Versions
45.9. Utility Functions
45.10. Environment Variables

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

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


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.


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.