Re: plpython transforms vs. arrays
Jiří Fejfar <[email protected]> Fri, 3 May 2019 06:53:43 +0200
| Newsgroups | gmane.comp.db.postgresql.sql |
|---|---|
| Message-ID | <[email protected]> |
Dear Mark, I am also looking around to find way how to do effectively (in parallel?) computations (with potentially large and sometimes sparse) matrices directly in PostgreSQL. Some time ago I have found this experimental extension https://github.com/PandaPost/panda_post which "allow you to represent Python NumPy/Pandas objects in Postgres". There is also http://madlib.apache.org/ but is seems too much "heavyweight" for my use-case. Now I do not have much time to spent with this, but I hope in late summer it will be better. I am looking forward what will be your conclusions. Good luck, Jiří. On 5/2/19 7:51 PM, Mark Teper wrote: > > Hi, > > I'm trying to build some numerical processing algorithms on Postgres > Array data types. Using PL/Python I can get access to the numpy > libraries but the performance is not great. A guess is that there is > a lot of overhead going from Postgres -> Python List -> Numpy and back > again. > > I'd like to test if that's the issue, and potentially fix by creating > a C extension to convert directly from Postgres Array types to Numpy > Array types. I _think_ I have the C side somewhat working, but I > can't get Postgres to use the transform. > > What I have: > > --- > > CREATE FUNCTION arr_to_np(val internal) RETURNS internal LANGUAGE C AS > 'MODULE_PATHNAME', 'arr_to_np'; > > CREATE FUNCTION np_to_arr(val internal) RETURNS real[] LANGUAGE C AS > 'MODULE_PATHNAME', 'np_to_arr'; > > CREATE TRANSFORM FOR real[] LANGUAGE plpythonu ( > > FROM SQL WITH FUNCTION arr_to_np(internal), > > TO SQL WITH FUNCTION np_to_arr(internal) > > ); > > CREATE FUNCTION fn (a integer[]) RETURNS integer > > TRANSFORM FOR TYPE real[] > > AS $$ return a $$ LANGUAGE plpythonu; > > ---- > > The problem is this produces an error that transforms for type "real" > doesn't work. It doesn't seem to allow for transforms on array's as > opposed to underlying types. Is it possible to tell it to apply the > transform to the array? > > Thanks, > > Mark >