[Pgsql-ayuda] Llamada a programas externos desde postgres

Edwin Quijada listas_quijada@hotmail.com
Tue, 27 Jan 2004 14:46:01 +0000


Porque no instalas Pl/Perl en la base de datos y haces esto en vez de 
amargarte la vida corriendo funciones desde C??

*-------------------------------------------------------*
*-Edwin Quijada
*-Developer DataBase
*-JQ Microsistemas
*-809-747-2787
* " Si deseas lograr cosas excepcionales debes de hacer cosas fuera de lo 
comun"
*-------------------------------------------------------*





>From: "Magnvs -- Carles Querol" <magnvsctv@hotmail.com>
>To: pgsql-ayuda@tlali.iztacala.unam.mx
>Subject: [Pgsql-ayuda] Llamada a programas externos desde postgres
>Date: Mon, 26 Jan 2004 18:52:22 +0000
>
>Hola a todos,
>
>Me he pasado la última semana rompiéndome la cabeza para escribir una 
>función en C que llame a un procedimiento externo para poder generar 
>documentos XML, pero no hay forma de que funcione. Así, que si alguno sabe 
>si postgres ya tiene implementada una función de este tipo, por favor que 
>me lo haga saber. Os pego el código de la función que he escrito yo, por si 
>alguno de vosotros puede decirme donde falla (cuando la llamo con, por 
>ejemplo, select CridarExec('/usr/bin/perl','-V'), me devuelve el valor "2", 
>que según errno, significa que no tengo permisos para ejecutar el programa 
>invocado):
>
>
>    1 #include <stdio.h>
>    2 #include <errno.h>
>    3 #include "postgres.h"
>    4 #include "fmgr.h"
>    5 #include <unistd.h>
>    6 #include <string.h>
>    7 #include <errno.h>
>    8
>    9
>   10 PG_FUNCTION_INFO_V1(CridarExec);
>   11
>   12
>   13 Datum
>   14 CridarExec (PG_FUNCTION_ARGS) {
>   15         int retornat;
>   16
>   17         text * path = PG_GETARG_TEXT_P(0);
>   18         text * args = PG_GETARG_TEXT_P(1);
>   19
>   20         size_t filename_len  = VARSIZE(path)-VARHDRSZ;
>   21         size_t arguments_len = VARSIZE(args)-VARHDRSZ;
>   22
>   23         char *filename;
>   24         char *arguments;
>   25
>   26         filename  = (char *)palloc(filename_len);
>   27         arguments = (char *)palloc(arguments_len);
>   28
>   29         memcpy (filename,  VARDATA(path), filename_len);
>   30         memcpy (arguments, VARDATA(args), arguments_len);
>   31
>   32         filename[filename_len]  = '\0';
>   33         arguments[arguments_len]= '\0';
>   34
>   35         retornat = execl(filename, arguments, NULL);
>   36
>   37         pfree(filename);
>   38         pfree(arguments);
>   39
>   40         PG_RETURN_INT32((int32)errno);
>   41 }
>   42
>
>Gracias a todos.
>
>
>PD. Lo que paso como parámetros és el nombre del archivo y la opciones. La 
>idea es pasar como archivo ejecutable un módulo PHP y como parámetro, un 
>código a partir del cual se genera el documento XML.
>
>
>Carles Querol
>magnvsctv@hotmail.com
>carquesa@eui.upv.es
>
>Linux Registered User #299843
>
>_________________________________________________________________
>Charla con tus amigos en línea mediante MSN Messenger. 
>http://messenger.microsoft.com/es
>
>_______________________________________________
>Pgsql-ayuda mailing list
>Pgsql-ayuda@tlali.iztacala.unam.mx
>http://tlali.iztacala.unam.mx/mailman/listinfo/pgsql-ayuda

_________________________________________________________________
MSN Amor: busca tu ½ naranja http://latam.msn.com/amor/