On Tue, Jul 6, 2010 at 4:17 PM, Eliot Gable <
egable+pgsql-performa...@gmail.com <egable%2bpgsql-performa...@gmail.com>>wrote:

>
> On Tue, Jul 6, 2010 at 4:00 PM, Joe Conway <m...@joeconway.com> wrote:
>
>>
>>
>> This approach works, but you could also use the SFRM_Materialize mode
>> and calculate the entire result set in one go. That tends to be simpler.
>> See, for example crosstab_hash() in contrib/tablefunc for an example.
>>
>> FWIW, there are also some good examples of array handling in PL/R, e.g.
>> pg_array_get_r() in pg_conversion.c
>>
>>
>  Thanks. That looks like less code and probably will be slightly more
> efficient.
>

I just got my first test of the new C-based function compiled and loaded
into the server. The first time it is called, I see it correctly print the
priority of each of the five rows of the array that I passed to it:

Got priority 1.
Got priority 1.
Got priority 1.
Got priority 1.
Got priority 1.
CONTEXT: ERROR
CODE: XX000
MESSAGE: cache lookup failed for type 7602245
---------------------------------------------------------------------------

I assume this "cache lookup" error is because I am not actually returning
any results (or even NULL) at the end of the function call. If it means
something else, please let me know.

Do I need to somehow force the server to unload and then re-load this .so
file each time I build a new version of it? If so, how do I do that? Can I
just re-run the "create or replace function" SQL code again to make that
happen? In every other system I have dealt with where I build a module, I
have some way to unload the module and force it to load again; but I don't
see a mention of that in the PostgreSQL documentation.

Thanks again to everyone who has provided feedback.

-- 
Eliot Gable

Reply via email to