Re: Registring a C function in PostgreSQL II - Mailing list pgsql-sql
From | Miguel González |
---|---|
Subject | Re: Registring a C function in PostgreSQL II |
Date | |
Msg-id | 001501c14138$3af36c10$1301a8c0@uimagen Whole thread Raw |
Responses |
Re: Registring a C function in PostgreSQL II
|
List | pgsql-sql |
Thank you very much for your help. After being testing the program first from my prompt (it worked fine) andthen within PostgreSQL, I realized that I was usingaliases for the systemusers emails (for instance I used postgres instead ofpostgres@myhost.mydomain.com once that i tried the "complete" email address it worked fine. Is itpossible to use aliases from within PostgreSQL (outsideworks fine, which issomething weird that I dont understand). Many thanks Miguel > ----- Original Message ----- > From: "Haller Christoph" <ch@rodos.fzk.de> > To: "Miguel González" <iafmgc@unileon.es> > Cc: <pgsql-sql@postgresql.org> > Sent: Wednesday, September 19, 2001 4:41 PM > Subject: Re: [SQL] Registring a C function in PostgreSQL II > > > > I'm working on a HP-UX system, so some of the > > following has to be adapted, but in principle > > it's the same on every system and it works. > > First piece of code is a standalone program, > > which you should always write and test before > > you start creating C functions inside PostgreSQL. > > Second piece is your sendemail function slightly > > modified to make it run on my system. > > When I do a > > select sendemail('ch', 'was soll das?') ; > > I'm receiving an email from postgres. > > Regards, Christoph > > > > First piece: > > > > /* > > cc -Aa -g -I/opt/pgsql/include/ -c sendemtest.c > > cc sendemail.o sendemtest.o -o sendemtest > > */ > > #include <stdio.h> > > #include <stdlib.h> > > #include <string.h> > > #include "postgres.h" > > > > void main() { > > char buf[1024]; > > int ln; > > text *res; > > text *to; > > int sendemail(text *email,text *message); > > > > strcpy(buf, "Kissenminister Aussinger \n"); > > ln = strlen(buf); > > > > res = (text *) malloc(VARHDRSZ + ln); > > memset(res, 0, VARHDRSZ + ln); > > res->vl_len = VARHDRSZ + ln; > > memcpy(res->vl_dat, buf, (int) ln); > > > > strcpy(buf, "ch"); > > ln = strlen(buf); > > > > to = (text *) malloc(VARHDRSZ + ln); > > memset(to, 0, VARHDRSZ + ln); > > to->vl_len = VARHDRSZ + ln; > > memcpy(to->vl_dat, buf, (int) ln); > > > > sendemail(to, res); > > } > > > > Second piece: > > > > /* > > cc -Aa -g -I/opt/pgsql/include/ +z -c sendemail.c > > ld -b -o sendemail.sl sendemail.o > > > > CREATE FUNCTION sendemail(text,text) RETURNS int4 > > AS '/fdsk2/users/ch/tools/pgsql.mydoc/sendemail.sl' LANGUAGE 'c'; > > DROP FUNCTION sendemail(text,text); > > */ > > #include <stdio.h> > > #include <stdlib.h> > > #include "postgres.h" > > > > int sendemail(text *email,text *message) > > { > > int result = 0 ; > > > > char string_tosend [300]; > > > > sprintf(string_tosend,"/usr/bin/echo \"%s\" > >/tmp/mailtmp.txt\n",VARDATA(message)); > > > > result += system(string_tosend); > > > > sprintf(string_tosend,"/usr/bin/mail -dt %s </tmp/mailtmp.txt \n", > > VARDATA(email)); > > > > result += system(string_tosend); > > > > result += system("/usr/bin/rm /tmp/mailtmp.txt"); > > > > return result; > > > > > > } > > > > > > ---------------------------(end of broadcast)--------------------------- > > TIP 1: subscribe and unsubscribe commands go to majordomo@postgresql.org > > >