--- title: "PL/Python — Python Procedural Language" id: plpython pg_version: "20devel" --- # PL/Python — Python Procedural Language ## Table of Contents - [44.1. PL/Python Functions](plpython-funcs.md) - [44.2. Data Values](plpython-data.md) - [44.2.1. Data Type Mapping](plpython-data.md#plpython-data-type-mapping) - [44.2.2. Null, None](plpython-data.md#plpython-data-null) - [44.2.3. Arrays, Lists](plpython-data.md#plpython-arrays) - [44.2.4. Composite Types](plpython-data.md#plpython-data-composite-types) - [44.2.5. Set-Returning Functions](plpython-data.md#plpython-data-set-returning-funcs) - [44.3. Sharing Data](plpython-sharing.md) - [44.4. Anonymous Code Blocks](plpython-do.md) - [44.5. Trigger Functions](plpython-trigger.md) - [44.6. Event Trigger Functions](plpython-event-trigger.md) - [44.7. Database Access](plpython-database.md) - [44.7.1. Database Access Functions](plpython-database.md#plpython-database-access-funcs) - [44.7.2. Trapping Errors](plpython-database.md#plpython-trapping) - [44.8. Explicit Subtransactions](plpython-subtransaction.md) - [44.8.1. Subtransaction Context Managers](plpython-subtransaction.md#plpython-subtransaction-context-managers) - [44.9. Transaction Management](plpython-transactions.md) - [44.10. Utility Functions](plpython-util.md) - [44.11. Python 2 vs. Python 3](plpython-python23.md) - [44.12. Environment Variables](plpython-envar.md) The PL/Python procedural language allows PostgreSQL functions and procedures to be written in the [Python language](https://www.python.org). To install PL/Python in a particular database, use `CREATE EXTENSION plpython3u`. > [!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 `plpython3u`. 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 `plpython3u`. > [!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.