has anybody used ctypes to call back into c program which embeds a python interpreter

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


I want to use ctypes to use some functions from postgreSQL server which
embeds python interpreter as language pl/python. 

That is I want to use ctypes to call _back_ to some internal functions
in the server

What I tried is the following:

hannu=# create or replace function send_raw_notice(rn_text text)
 returns text 
 language plpythonu

from ctypes import *
import struct

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

return rn_text
hannu=# select send_raw_notice('so you see me?');
The connection to the server was lost. Attempting reset: Failed.

This caused a segfault:

2012-03-31 16:28:24 CEST LOG:  server process (PID 8739) was terminated
by signal 11: Segmentation fault
2012-03-31 16:28:24 CEST LOG:  terminating any other active server

I suspect it is due to not calling into the host program (the running
server) but into a newly loaded and uninitialized copy of postmaster
loaded as library

Does anyone have ideas how to call into the embedding c program from
ctypes ?


More information about the Python-list mailing list