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

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,
Jas


On 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:

Previous
From: "Jasbinder Bali"
Date:
Subject: Re: [GENERAL] Shared Objects (Dynamic loading)
Next
From: Michael Fuhr
Date:
Subject: Re: [GENERAL] Shared Objects (Dynamic loading)