Criando extensões para Postgre

View: New views
5 Messages — Rating Filter:   Alert me  

Criando extensões para Postgre

by Marcone-2 :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

Prezados,

Estou tentando desenvolver uma extensão para postgre e estou
encontrando algumas dificuldades. Gostaria de saber se alguém aqui
sabe onde posso encontrar uma documentação mais detalhada sobre a
construção de extensões para postgre de preferência que conste a
documentação das bibliotecas e dos arquivos de cabeçalho (.h) que
acompanham o postgre.

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.

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.

A intenção é fazer uma espécie de “polimorfismo” na execução de
determinada atividade no banco de dados, onde para cada situação o
usuário poderá especificar as funções que trataram de determinado tipo
de dado.

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.

Grande abraço a todos.
_______________________________________________
pgbr-geral mailing list
pgbr-geral@...
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

Re: Criando extensões para Postgre

by Jose adriano Alves :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

Na PGCon Euler apresentou como criar extensões e falou também do formato que deve ter as extensões..

Nesse site, do Euler, tem a apresentação que você pode se basear, muito bem explicada...

http://www.timbira.com/docs.php

Atente ao nome do nosso maravilhoso banco de dados: POSTGRESQL ou POSTGRES, e não "postgre ou postgree"...



2009/11/3 Marcone <marconeperes@...>
Prezados,

Estou tentando desenvolver uma extensão para postgre e estou
encontrando algumas dificuldades. Gostaria de saber se alguém aqui
sabe onde posso encontrar uma documentação mais detalhada sobre a
construção de extensões para postgre de preferência que conste a
documentação das bibliotecas e dos arquivos de cabeçalho (.h) que
acompanham o postgre.

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.

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.

A intenção é fazer uma espécie de “polimorfismo” na execução de
determinada atividade no banco de dados, onde para cada situação o
usuário poderá especificar as funções que trataram de determinado tipo
de dado.

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.

Grande abraço a todos.
_______________________________________________
pgbr-geral mailing list
pgbr-geral@...
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral



--
----

Att.
José Adriano Alves
Analista de Sistemas - Móveis Gazin.
Cel..:  +55 44 8802 3994
Fone: + 55 44 3663 8000 - 2319
Mail: alves.jadriano@...
MSN: jose.adriano@...



Este e-mail, seu conteúdo e seus anexos estão sujeitos à privilégio de comunicação podendo este documento incluir informação confidencial e de propriedade restrita da GAZIN e apenas pode ser lido por aqueles a qual o mesmo tenha sido endereçado. Se você recebeu essa mensagem de e-mail indevidamente, por favor avise-nos imediatamente. Quaisquer dados, opiniões ou informações expressadas neste e-mail pertencem ao seu remetente e não necessariamente coincidem com aquelas da GAZIN, são de exclusiva responsabilidade do signatário. Este documento não pode ser reproduzido, copiado, distribuído, publicado ou modificado por terceiros, sem a prévia autorização por escrito da GAZIN.


Antes de imprimir pense em seu compromisso com o Meio Ambiente

_______________________________________________
pgbr-geral mailing list
pgbr-geral@...
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

Re: Criando extensões para Postgre

by Euler Taveira de Oliveira-2 :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

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
pgbr-geral@...
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

Re: Criando extensões para Postgre

by Marcone-2 :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

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 <euler@...>:

> 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
> pgbr-geral@...
> https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
>
_______________________________________________
pgbr-geral mailing list
pgbr-geral@...
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

Re: Criando extensões para Postgre

by Euler Taveira de Oliveira-2 :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

Marcone escreveu:
> 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.
>
Apesar de ser um trabalho acadêmico acho que você _deve_ se preocupar com uma
implementação clara e robusta também. Eu ainda acho que PL/PgSQL é uma
linguagem _inadequada_ para tal proeza; além de ser mais lento do que C, ela
não é uma linguagem apropriada para cálculos e sim para acesso a dados.

> 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.
>
Você leu src/backend/utils/fmgr/README? Se não quiser utilizar fmgr() basta
utilizar OidFunctionCallX().


--
  Euler Taveira de Oliveira
  http://www.timbira.com/
_______________________________________________
pgbr-geral mailing list
pgbr-geral@...
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral