Re: Compilar una funcion en C

From: Nicolás Domínguez Florit <ndomin(at)rec(dot)unicen(dot)edu(dot)ar>
To: pgsql-es-ayuda(at)postgresql(dot)org
Subject: Re: Compilar una funcion en C
Date: 2006-06-28 15:30:10
Message-ID: 44A2A082.3010008@rec.unicen.edu.ar
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

Sorprendente!!! Muchas gracias Alvaro.

Solo me faltaria compilar lo mismo para windows y obtener una dll ¿no?

Aaaa, tendre en cuenta lo que me dices de los triggers, igualmente ahora
me sirva o no lo quiero hacer. Ya que me gusta el potencial de poder
usar funciones C.

Saludos, Nicolas.

Alvaro Herrera escribió:
> Nicolás Domínguez Florit escribió:
>
>
>> Con respecto a 2) lo maximo que logre fue compilar una funcion C que
>> contenia el siguiente codigo:
>> int add_one(int arg)
>> { return arg + 1; }
>>
>
> Eso no te sirve, porque tienes que declarar la funcion usando "el
> protocolo fmgr V1". Es un Postgres-ismo que se usa para pasar y
> retornar argumentos.
>
> Por ej.
>
> #include "postgres.h"
> #include "fmgr.h"
> PG_FUNCTION_INFO_V1(digitoVer);
> Datum digitoVer(PG_FUNCTION_ARGS) {
> int rut = PG_GETARG_INT32(0);
> text *ret;
> int M=0, S=1;
> for (; rut; rut = rut / 10)
> S = (S + rut % 10 * (9 - M++ % 6)) % 11;
> ret = (text *) palloc(VARHDRSZ + 1);
> VARATT_SIZEP(ret) = 5;
> sprintf(VARDATA(ret), "%c", S ? S + '0' - 1 : 'K');
> PG_RETURN_TEXT_P(ret);
> }
>
> Luego compilas eso con
>
> gcc -Wall -O2 -c -fpic
> -I`pg_config --includedir`
> -I`pg_config --includedir`/server
> pglib.c
> gcc -shared pglib.o -o pglib.so
>
> Lo metes en el directorio que te entregue pg_config --libdir, y
> finalmente haces
>
> CREATE OR REPLACE FUNCTION
> digito_verificador(INTEGER)
> RETURNS TEXT
> STRICT IMMUTABLE
> AS '$libdir/pglib.so',
> 'digitoVer' LANGUAGE C;
>
> Despues pruebas esto:
>
> select digito_verificador(14052209);
>
>
> Ahora, te digo de inmediato que lo que quieres hacer fallara de
> inmediato en cuanto haya un trigger, porque si el trigger modifica el
> registro que se esta insertando, debug_query_string va a tener el valor
> original y no el valor que el trigger le puso a la variable.
>
>

In response to

Responses

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Alvaro Herrera 2006-06-28 15:46:45 Re: Compilar una funcion en C
Previous Message Adriana Rita 2006-06-28 15:05:49 problemas con apostrofes