[Python-Dev] Using Cython for developing a module to be used from postgreSQL/pl/python

Hannu Krosing hannu at krosing.net
Sat Mar 31 16:04:16 CEST 2012


On Sun, 2012-04-01 at 00:44 +1100, Ben Finney wrote:
> Hannu Krosing <hannu at krosing.net> writes:
> 
> > Has anyone used Cython for developing a module to be used from
> > postgreSQL/pl/python.
> >
> > Something that calls back to PostgreSQL internals.
> 
> Are you aware that PostgreSQL has long provided Python as a language for
> writing stored procedures in the database?
> 
>     <URL:http://www.postgresql.org/docs/current/static/plpython.html>
> 
> Does that meet your needs?

Sure, I have even contributed code to it ;)

But what i want is some way to call _back_ into PostgreSQL to use its
internal functions from a module imported from pl/python.

I tried ctypes module and got a segfault when i used the following

create or replace function callback_to_postgres(rn_text text)
 returns text 
 language plpythonu
as
$$

from ctypes import *
import struct

pg = cdll.LoadLibrary('/usr/lib/postgresql/9.1/bin/postmaster')
pg.pq_flush()

return rn_text
$$;

select send_raw_notice('do you see me?');

<CRASHES HERE>

I determined that the call to pg.pq_flush() was the one crashing the
backend, so I assume that cdll.LoadLibrary did not get the already
running backend, but loaded another copy of it as library.


Now I'm looking for a simplest way to do some C-wrapping. I have used
Cyuthon for wrapping simple library calls and I really don'r think there
would be hard problems doing this inside the postgreSQL extension build
framework. 

I was just hoping that someboduy had already taken care of all the
nitty-gritty detaiuls of setting this up


-------
Hannu Krosing
PostgreSQL Unlimited Scalability and Performance Consultant
2ndQuadrant Nordic
PG Admin Book: http://www.2ndQuadrant.com/books/







More information about the Python-Dev mailing list