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](https://www.postgresql.org/docs/current/plpython.html).
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
```bash
pip install pybabar
```
Let's create a Postgres extension called [`pystring`](babar/examples/pystring.py)
which adds a few Python functions.
```python
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:
```bash
python pystring.py
```
That will create the appropriate extension files,
which you can then install in the usual Postgres way:
```bash
make
make install
```
Then you can `CREATE` the extension and use it
```bash
psql -d postgres <