Re: Shared Objects (Dynamic loading) - Mailing list pgsql-general

From Michael Fuhr
Subject Re: Shared Objects (Dynamic loading)
Date
Msg-id 20060824054149.GA90995@winnie.fuhr.org
Whole thread Raw
In response to Shared Objects (Dynamic loading)  ("Jasbinder Bali" <jsbali@gmail.com>)
Responses Re: Shared Objects (Dynamic loading)  (Michael Meskes <meskes@postgresql.org>)
Re: Shared Objects (Dynamic loading)  ("Jasbinder Bali" <jsbali@gmail.com>)
List pgsql-general
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-general by date:

Previous
From: "Jasbinder Bali"
Date:
Subject: Shared Objects (Dynamic loading)
Next
From: "surabhi.ahuja"
Date:
Subject: Re: [JDBC] org.postgresql.util.PSQLException: An I/O error occured while sending to the backend