[Pgsql-ayuda] Llamada a programas externos desde postgres

Magnvs -- Carles Querol magnvsctv@hotmail.com
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