|
View:
New views
5 Messages
—
Rating Filter:
Alert me
|
|
|
Criando extensões para PostgrePrezados,
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 PostgreNa 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, -- ---- 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 PostgreMarcone 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 PostgreCaros,
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 PostgreMarcone 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 |
| Free embeddable forum powered by Nabble | Forum Help |