Skip to main content
Pre-release

This release is a pre-release and may not be stable for production use.

Logo

Babar🐘❤️🐍

Turn any Python object into a Postgres extension

Status | Why | How | Installation | Usage | Roadmap

Status

WARNING: This is a work in progress and is far from doing what it promises. But not that far... 😉

Why

Postgres has supported Python as a procedural language for years via PL/Python.

Embedding non-trivial Python code in Postgres can get cumbersome and usually involves copy-pasting from existing code bases and/or creating thin wrappers around existing functions.

babar automates this process by allowing you to seamlessly package existing Python components (functions, classes etc.) int a postgres extension.

How

babar dynamically inspects the definition of Python objects and generates semantically equivalent Postgres definitions along with the necessary extension files (.control, Makefile, .sql)

Installation

Usage

pip install pybabar

Let's create a Postgres extension called pystring which adds a few Python functions.

from babar import Extension

def pyconcat(x: str, y: str) -> str:
    return x + y

def pyupper(x: str) -> str:
    return x.upper()

if __name__ == "__main__":
    Extension(
        "pystring",
        pyconcat, pyupper,
        comment="this is the pystring extension",
        default_version="0.1.0",
    )

Then, from the command line, you can run:

python pystring.py

That will create the appropriate extension files, which you can then install in the usual Postgres way:

make 
make install

Then you can CREATE the extension and use it

psql -d postgres <<SQL
CREATE EXTENSION pystring

SELECT pyconcat('hello ', 'world');
SELECT pyupper('hello');
SQL

Roadmap

v0.1.0 (wip)

  • simple functions (not classes, methods etc)
  • Functions should be 100% self-contained (outer scope is not inspected)
  • primitive types only: support only str/text as arg and return
  • Probably no cli interface / just python main.py

Future

  • @pg_function decorator for individual functions. Much like click;
  • maybe subclass Extension should make a whole Python class an extension?
  • CLI like babar -m pack.mod.func1 pack2.mod2.func2
  • Handle upgrades
  • pgxn integration

It is lightly inspired by Python-Fire which turns any Python object into a cli interface

Release files for pybabar 0.1.0a3

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for pybabar 0.1.0a3
File Size Uploaded
pybabar-0.1.0a3.tar.gz 12.3 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for pybabar 0.1.0a3
File Interpreter ABI Platform
pybabar-0.1.0a3-py3-none-any.whl Python 3 none any Details

Total release size: 24.4 kB

Release files / pybabar-0.1.0a3.tar.gz

Download URL pybabar-0.1.0a3.tar.gz
Size 12.3 kB
Tags Source
SHA-256 checksum
How to use checksums
8b24c975645e3c3a821406be22d5d685b3083851ed20115b415018899acbded7
BLAKE2b-256 checksum
How to use checksums
495224d2d1794258a51596477865f78438bd1011928db7c7669c7fb1d98fbdc9
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/4.0.2 CPython/3.11.6

Release files / pybabar-0.1.0a3-py3-none-any.whl

Download URL pybabar-0.1.0a3-py3-none-any.whl
Size 12.1 kB
Tags Python 3
SHA-256 checksum
How to use checksums
c24d0add7ad7e38f5221fe6ded4fd6266eee2e1b07bd9d07e669b88cf0b3a1aa
BLAKE2b-256 checksum
How to use checksums
14f8215a652683fe460d17ff840de67c7a57303d05b446991c3e01025800a17c
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/4.0.2 CPython/3.11.6

Release history Release notifications | RSS feed

This release

0.1.0a3 This release

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page