WIP:plpython3

From PostgreSQL wiki
Jump to navigationJump to search

Feature-wise, this is done--actually, I plan to remove some features. If you are interested in seeing this in PostgreSQL, please drop an e-mail as I would like to know( x <at sign> jwp.name ).

Info

pl/python3 is a procedural language implementation for Python 3.x

This WIP is targeting a patch for 8.5.

The git branch is located at http://git.postgresql.org/gitweb?p=plpython3.git;a=summary

Progress

  • Module based functions
  • Function PEP302 support (__loader__, for linecache support)
  • Tracebacks in CONTEXT
  • IST support (subtransactions)
  • Database Error support; Postgres Error -> Python Exception -> Postgres Error
  • SRFs (VPC and Materialized & Postgres.Cursor optimization)
  • Triggers (statement & row)
  • Type Interfaces (native typing)
  • Polymorphic types.
  • SPI/Prepared Statements and Cursors
  • Postgres.execute(sql_statements_string) (SPI_execute_statements() for bulk, parameter-less DDL/DML)
  • Large Object class (io.IOBase; some protocol conformance not possible, atm)
  • @pytypes decorator for converting Postgres.Object parameters to standard Python types
  • Properties to get parts of time types (ts.day, ddate.month, intv.second, etc)
  • Direct Function Calls (limited to non-polymorphic, non-SRF, and non-TRIGGER)
  • Stateful functions (Regular functions whose main is a generator =)
  • DO-statement support.
  • Postgres.preload(...) (Load all the Python functions in the specified schemas)
  • Tests [basic I/O, ISTs, Errors, SRFs, Triggers, Domains, Enums, SPI, Polymorphing]
  • Documentation with a substantial reference section

Quick Start

Basic installation using git.

Getting PostgreSQL with pl/python3

Use git, fresh clone of pg(if you don't already have one):

git clone git://git.postgresql.org/git/postgresql.git
cd postgresql

Fetch and checkout the plpython3 branch:

git remote add plpython3 git://git.postgresql.org/git/plpython3.git
git fetch plpython3
git branch plpython3 plpython3/plpython3
git checkout plpython3

Installing PostgreSQL with pl/python3

Like pl/python, pl/python3 can be configured and installed using a configure argument: --with-python3:

$ ./configure --with-python3

However, for testing, the following is recommended:

$ env "CFLAGS=-O0 -ggdb3" ./configure --enable-depend --enable-debug --enable-cassert --with-python3
# Don't forget to add an appropriate --prefix=

This relies on the python3 executable being accessible in the PATH. (Note: Python 3.0 is not supported, ATM. Use Python 3.1)

Once installed, the language can be created in a database using:

CREATE LANGUAGE plpython3u;

This uses the pg_pltemplate entry like other PLs.

Documentation

Temporarily available here:

http://python.projects.postgresql.org/pldocs/plpython3.html