Re: hstores in pl/python

Поиск
Список
Период
Сортировка
От Jan Urbański
Тема Re: hstores in pl/python
Дата
Msg-id 20101215110944.GA17954@wulczer.org
обсуждение исходный текст
Ответ на Re: hstores in pl/python  (Jan Urbański <wulczer@wulczer.org>)
Ответы Re: hstores in pl/python  (Tom Lane <tgl@sss.pgh.pa.us>)
Список pgsql-hackers
On Wed, Dec 15, 2010 at 12:19:53AM +0100, Jan Urbański wrote:
> Problem: what to do it hstore_plpython gets loaded, but hstore is not
> yet loaded. hstore_plpython will want to DirectFunctionCall(hstore_in),
> so loading hstore_plpython without loading hstore will result in an
> ereport(ERROR, "undefined symbol hstore_in") with an errhint of "please
> load hstore first". I could live with that, if no one has a better idea.

Correction: you won't get the helpful errhint, because the ERROR will be thrown when some does LOAD. And it still does
notsolve the problem of knowing whether it's a hstore that's been passed in to you.
 

OK, here's another master plan:

1) hstore_plplython, when loaded, looks for a type called "hstore". If you created a "hstore" type that does not come
fromhstore.so, and you still load hstore_plpython, you deserve a segfault. If there is no type "hstore", it throws an
ERROR.If it finds a type with that name, it creates a rendezvous variable with the name OID_plpython_parsers that
pointsto two functions. These functions use the looked up type's I/O funcs and transform things you pass to them from
andinto Python objects.
 

2) plpython, when receiving an object with a type with the name X, takes its OID, it the OID happens not to be one of
BOOLOID,FLOAT8OID etc, it does one last push of looking for a rendezvous variable OID_plpython_parsers and if it finds
one,uses its parsers. If it doesn't find it, it does what it did now (cast to text and pass it to the type's I/O
func).

That looks almost good to me. It's mildly annoying that you can't load hstore_plpython before hstore, but I could live
withthat.
 

Observe that this allows you to write a isbn_plpython module that would expose parsers for ISBN for python (or
json_plpython),as well as hstore_perl, isbn_tcl and so on. It piggybacks on the rendezvous variables mechanism, and
maybein the future you could get some kind of official support in the backend for this kind of things (ie. a hash table
inTopLevelContext keyed on the OIDs of the type and the language).
 

So I'm going to try this approach now.

Cheers,
Jan


В списке pgsql-hackers по дате отправления:

Предыдущее
От: Peter Geoghegan
Дата:
Сообщение: Re: Segfault related to pg_authid when running initdb from git master
Следующее
От: Magnus Hagander
Дата:
Сообщение: Default mode for shutdown