Search Postgresql Archives

Crashing on insert to GIN index

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



I am defining a new type, FooBar, and trying to create a GIN index for it. Everything is working well without the index. FooBar values are getting into a table, and being retrieved and selected correctly. But I'm getting a crash when I add a GIN index on a column of type FooBar.

Here is the operator class:

create operator class foobar_ops
default for type foobar using gin
as
        operator 1 @@,
        function 1 foobar_cmp(bigint, bigint),
        function 2 foobar_item_to_keys(foobar, internal),
        function 3 foobar_query_to_keys(foobar, internal, int2, internal, internal),
        function 4 foobar_match(internal, int2, anyelement, int4, internal, internal),
        function 5 foobar_partial_match(foobar, foobar, int2, internal);


Here is the postgres function for extracting keys from FooBar values:

create function foobar_item_to_keys(foobar, internal) returns internal
as '$libdir/foobar'
language C immutable strict parallel safe;


And the implementation:

Datum foobar_item_to_keys(PG_FUNCTION_ARGS)
{
    FooBar* foobar = (FooBar*) DatumGetPointer(PG_GETARG_DATUM(0));
    int32* n_keys = (int32*) PG_GETARG_POINTER(1);
    int64_t* keys = (int64_t*) palloc(sizeof(int64_t));
    *n_keys = 1;
    keys[0] = foobar->key0;
    PG_RETURN_POINTER(keys);
}

(Eventually there will be multiple keys, so it really does need to be a GIN index.)

I have used ereport debugging to prove that the FooBar delivered into foobar_item_to_keys is correct, and that the PG_RETURN_POINTER statement is being reached.

I have been reading the Postgres docs, and comparing my code to the examples in contrib, and cannot see what I'm doing wrong. Can anyone see a problem in what I've described? Or point me in the right direction to debug this problem?

Thanks.

Jack Orenstein

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [Postgresql Jobs]     [Postgresql Admin]     [Postgresql Performance]     [Linux Clusters]     [PHP Home]     [PHP on Windows]     [Kernel Newbies]     [PHP Classes]     [PHP Books]     [PHP Databases]     [Postgresql & PHP]     [Yosemite]

  Powered by Linux