Thread: Python as a procedural language

Python as a procedural language

From
andrew@corvus.biomed.brown.edu (Andrew Bosma)
Date:
Hi

I've coded up a module that implements python as a procedural language
for postgresql.  A tarball can be downloaded at

http://users.ids.net/~bosma

If anyone is interested, take a look at it.  Comments and suggestions
would be appreciated.  Functions and triggers work. The SPI interface
can run execute queries and saved plans.  I'm sure there's a bug or
three still lurking in there.  Installation instructions are in the
tarball.  The only complication is that for python to load its dynamic
modules without unresolved symbols, the flags passed to dlopen need to
be modified.  This means you will have to rebuild postgres.  Is there
any reason why the default dlopen is called without the RTLD_GLOBAL
flag?  (Actually you can build without modifying postgres, but that
requires explicitly linking python loadable modules to the language
module.)

Thanks
Andrew Bosma

-- 





RE: Python as a procedural language

From
"Erny"
Date:
Hi,

i compiled and installed this.

I wonder how you would write a recursive function such as:

CREATE FUNCTION factx(int4) RETURNS int4 AS '
def f(n):   if n==0:       return 1   else:       return n*f(n-1)
return f(args[0])
' LANGUAGE 'plpython';

When called, it crashes in the       return n*f(n-1)
line, not knowing what f is. I could fix that using SD like this:
CREATE FUNCTION factx(int4) RETURNS int4 AS '
def f(n):   if n==0:       return 1   else:       return n*SD["f"](n-1)
SD["f"]=f
return f(args[0])
' LANGUAGE 'plpython';

Or putting the function as attribute of pgpy.

What happens to the namespace?

Erny
Spain