Re: [GENERAL] Shared Objects (Dynamic loading) - Mailing list pgsql-novice
From | Jasbinder Bali |
---|---|
Subject | Re: [GENERAL] Shared Objects (Dynamic loading) |
Date | |
Msg-id | a47902760608240029q47280ca0l4af264442b6c9685@mail.gmail.com Whole thread Raw |
In response to | Re: [GENERAL] Shared Objects (Dynamic loading) ("Jasbinder Bali" <jsbali@gmail.com>) |
Responses |
Re: [GENERAL] Shared Objects (Dynamic loading)
(Michael Fuhr <mike@fuhr.org>)
|
List | pgsql-novice |
Also, when i dynamically load a shared library and then later on change the code, create the same shared library (same name) and run my function where in the shared library is loaded, it takes the reference of the old shared library.
why does this happen and how to get rid of this.
Thanks and regards,
Jas
why does this happen and how to get rid of this.
Thanks and regards,
Jas
On 8/24/06, Jasbinder Bali < jsbali@gmail.com> wrote:
Well, the server side code is in ECPG because thats the easiest choice i could see.
I really don't know how difficult or beneficial would SPI be. Haven't heard of SPI before.
I was under the impression that ECPG and libpg are the only two choices a developer has in postgresql for database related activities.
I am using char in postgres function as an analogue for char* in C. Is this correct?
The link that you gave says varchar* in C has varchar as its analogue in postgresql.
Thanks and regards,
JasOn 8/24/06, Michael Fuhr <mike@fuhr.org> wrote:On Thu, Aug 24, 2006 at 01:03:43AM -0400, Jasbinder Bali wrote:
> CREATE OR REPLACE FUNCTION sp_trigger_raw_email(int4, text)
> RETURNS bool AS
> '/usr/local/pgsql/jsbali/parser', 'parse_email'
> LANGUAGE 'c' VOLATILE STRICT;
> ALTER FUNCTION sp_trigger_raw_email(int4,text ) OWNER TO postgres;
>
> function parse_email(int caseno, char *rawemail)
> populates a few global variables first and then
> call another function parse_header().
> function parse_header() makes use of the global variables and then using
> ECPG stores values in a table in the database.
Is there a reason this server-side code is using ECPG instead of SPI?
http://www.postgresql.org/docs/8.1/interactive/spi.html
> My question is, when we try to make use of a specific function of a shared
> object dynamically loaded as show above, then
> would that function be able to access all global variables populated
> elsewhere in the program or all the global variables can't be accessed
> inside that function of the shared object.
A function should be able to access any global symbol and any static
symbol in the same object file. Are you having trouble doing so?
> Also, in the above function definition,
> the signature of parse_email function is
> parse_email(int, char*) and i am passing (int4 , text) to int as seen in the
> function code pasted above.
> Is text in pgsql going to match with char* or i should use some other
> datatype?
See "C-Language Functions" in the documentation, in particular what
it says about version 1 calling conventions.
http://www.postgresql.org/docs/8.1/interactive/xfunc-c.html
Is there a reason you're coding in C instead of a higher-level
language like PL/Perl? If you're parsing email messages then coding
in Perl, Python, Ruby, etc., would probably be easier than C.
--
Michael Fuhr
pgsql-novice by date: