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