Caros,
Obrigado pelo esforço na ajuda.

Gostaria aqui de pedir que nós abstraíssemos um pouco do problema, já
que este é apenas acadêmico. Trata-se do meu TCC de conclusão da
pós-graduação em Banco de Dados. Resumidamente, estou criando uma
extensão que permitirá fazer otimização de consultas que dependam de
cálculos complexos utilizando-se de computação genética. Minha
extensão cuida da parte da computação genética da coisa e o usuário
irá implementar as funções (em PlPgSQL ou em qualquer outra linguagem
de script do postgres) específicas de seus dados e submetê-las à
extensão para obter os resultados. Modéstia à parte, a implementação
está ficando muito boa!! O código está incrivelmente pequeno e
altamente rápido com gerenciamento de memória impecável. (Ao menos na
minha opnião!!!! hehehe) Isso em testes sem o Postgres.

Sei que não ficou muito claro, mas espero um dia ter a oportunidade de
demonstrá-la em uma PgCon por aí.

Na integração com o Postgres a única pendência é fazer com que as
funções especificadas possam ser chamadas pela extensão. Procurei,
porém não encontrei um exemplo que utilizasse de maneira compreensível
as funções FunctionCallX() e fmgr(). Pelo que eu vi no código do
Postgres a função fmgr está marcada como Deprecated e consta uma
notação para não mais usá-la em novas codificações.

Já as funções FunctionCallX possuem parâmetros de inicialização
bastante complexos e a explicação do código deixa um pouco a desejar,
além do fato de eu não ser nenhum expert em C (mas dá pro gasto...
hehehe).

Se alguém puder me dar alguma coisa do tipo:
_____________________________________________________________
Chamando a função “my_function(int x)”:

Código em C:
...
Resultado res = FunctionCallx(funcNameToFmgrInfo(“my_function”),
intToDatum(50));
_____________________________________________________________

Onde "res" armazenaria o resultado da função "my_function". Não
precisa ser necessariamente assim, mas que execute esta ação.

Se a chamada da função for por Oid também está valendo.

Pessoal, mais uma vez obrigado pela força. Quem der alguma sugestão
que me conduza à solução, garanto que coloco um agradecimento na
monografia. Não é grande coisa, mas pelo menos seu nome vai constar. E
se por ventura, eu conseguir a proeza de apresentar essa ferramenta
numa conferência aí vale o IBOPE.

Grande abraço a todos.




2009/11/7 Euler Taveira de Oliveira <[email protected]>:
> Marcone escreveu:
>> Meu problema (sendo mais específico) é que estou criando uma “DLL”, um
>> pacote com várias funções (linguagem C), que poderão ser utilizadas
>> para aprimoramento de consultas no postgre. Algumas destas funções
>> executam outras funções especificadas pelo usuário em PlPgSQL.
>>
> Como você está fazendo isso? Acredito estar indo pelo caminho mais longo. Por
> que não fazer tudo em C ou PL/PgSQL?
>
>> Em linhas gerais uma das funcionalidades obedece ao seguinte fluxo:
>> usuário define algumas funções, chama as funções da “DLL” passando as
>> funções criadas (nome da função) como parâmetro,  as funções da “DLL”
>> executam as funções do usuário e trabalham os resultados obtidos.
>>
> Para que colocar mais um elemento (funções da DLL) na sua solução? Por que não
> utilizar diretamente as funções definidas pelo usuário (UDF)?
>
>> O problema é que não encontrei uma maneira de chamar uma função do
>> usuário com esta estrutura. E, na verdade, nem sei se é possível, mas
>> acredito que seja. Sei que devo me aprofundar mais na arquitetura do
>> postgre e com isso dar continuidade à implementação, mas se alguém
>> puder me mostrar o caminho das pedras eu agradeço.
>>
> É possível. Vide fmgr_info() e FunctionCallX() (onde 1 <= x <= 9) no
> código-fonte do PostgreSQL para obter exemplos.
>
>
> --
>  Euler Taveira de Oliveira
>  http://www.timbira.com/
> _______________________________________________
> pgbr-geral mailing list
> [email protected]
> https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
>
_______________________________________________
pgbr-geral mailing list
[email protected]
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

Responder a