babar#
Babarπβ€οΈπ
Turn any Python object into a Postgres extension
Why |
How |
Installation |
Usage |
Roadmap
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. babar dynamically inspects the definition of Python objects
and generates semantically equivalent Postgres definitions
along with the necessary extension files ( Letβs create a Postgres extension called Then, from the command line, you can run: That will create the appropriate extension files,
which you can then install in the usual Postgres way: Then you can 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 maybe subclass CLI like Handle upgrades pgxn integration It is lightly inspired by Python-Fire
which turns any Python object into a cli interfaceWhy#
How#
.control
, Makefile
, .sql
)Installation#
Usage#
pip install pybabar
pystring
which adds two simple 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",
)
python pystring.py
make
make install
CREATE
the extension and use itpsql -d postgres <<SQL
CREATE EXTENSION pystring
SELECT pyconcat('hello ', 'world');
SELECT pyupper('hello');
SQL
Roadmap#
v0.1.0 (wip)#
Future#
@pg_function
decorator for individual functions. Much like click
;Extension
should make a whole Python class an extension?babar -m pack.mod.func1 pack2.mod2.func2
Contents#