Skip site navigation (1) Skip section navigation (2)

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 (view raw or flat)
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

pgsql-es-ayuda by date

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

Privacy Policy | About PostgreSQL
Copyright © 1996-2014 The PostgreSQL Global Development Group