From: | Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us> |
---|---|
To: | Arthur Chan <achan(at)comprehend(dot)com> |
Cc: | pgsql-novice(at)postgresql(dot)org |
Subject: | Re: writing custom data type |
Date: | 2013-02-01 20:58:29 |
Message-ID: | 22382.1359752309@sss.pgh.pa.us |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-novice |
Arthur Chan <achan(at)comprehend(dot)com> writes:
> I've been having trouble writing my own custom datatype for PG. when I do
> my `CREATE FUNCTION` call, it fails with:
> resultsets=# CREATE FUNCTION fuzzytime_in(cstring)
> RETURNS fuzzytime
> AS 'fuzzytimetype'
> LANGUAGE C IMMUTABLE STRICT;
> NOTICE: return type fuzzytime is only a shell
> ERROR: could not find function "fuzzytime_in" in file
> "/usr/lib/postgresql/9.1/lib/fuzzytimetype.so"
> now I checked my shared lib, and surely enough, it's there
> $ objdump -t /usr/lib/postgresql/9.1/lib/fuzzytimetype.so
> ...
> 00000000000018b0 g F .text 0000000000000070 fuzzytime_in
> ...
> So what gives? The code has PG_MODULE_MAGIC, and I'm
> calling PG_FUNCTION_INFO_V1(fuzzytime_in);
Huh, looks like it should work. I can think of a couple of gotchas:
(1) If the library is already loaded, CREATE FUNCTION doesn't reload it.
Maybe you have an old image of the .so in memory, which doesn't contain
the function? Try starting a fresh psql session.
(2) Maybe you compiled the function as C++, so it has a mangled name?
This theory requires that objdump automatically de-mangles names, which
I don't know for sure one way or the other.
regards, tom lane
From | Date | Subject | |
---|---|---|---|
Next Message | Michael Swierczek | 2013-02-01 21:35:55 | Re: writing custom data type |
Previous Message | Arthur Chan | 2013-02-01 20:27:25 | writing custom data type |