Em 05/02/2014 22:29, "Fabrízio de Royes Mello" <[email protected]>
escreveu:
>
> On 05-02-2014 15:01, Daniel Cordeiro wrote:
>>
>>
>> Obrigado pela correção Euler. Na ânsia de explicar uma forma de executar
>> o que se tinha interesse escrevi sem nem pensar na reescrita feita pelo
>> planejador antes da execução. Serei mais cuidadoso nas próximas!
>>
>> Acontece que minha realidade para a consulta que impulsionou a escolha
>> por uma procedure ao invés de uma visão é bem diferente da exposta no
>> início deste tópico. Minha consulta possui diversas subqueryes com
>> definições de parâmetros  e cálculos  que não puderam ser
>> solucionados/otimizados com uso de CTEs ou views (e se tornou
>> impraticável para o momento a reescrita do modelo de negócio do banco).
>> E não apenas encapsular uma única condição.
>>
>> Claro, sempre existe uma forma melhor de se fazer, o limite neste
>> contexto esta no meu 'universo conhecido' ;-P.
>>
>
> Daniel,
>
> Creio que vc compreendeu bem porque o pessoal lhe indicou simplesmente
criar uma VIEW e que a mesma sofre um processo de reescrita antes de ser
executada, e com isso obtemos performance.

Entendi sim.

>
> Então se mesmo assim vc precisa de um "parametro" em sua view, creio que
podes usar as funções "set_config" e "current_setting" [1] para criar uma
variável de sessão (ou use a extensão session_variables [2]).
>
> Exemplo:
>
> CREATE VIEW v_foo AS SELECT * FROM foo WHERE codigo =
current_setting('foo.codigo')::INTEGER;
>
> Para executar:
>
> SELECT set_config('foo.codigo', '1', false);
> SELECT * FROM v_foo;
>
> Não sei se isso lhe ajudará, até porque não compreendi bem o seu problema
de usar uma VIEW sem isso, e também tem a questão que vc terá se "setar" na
sessão o valor do seu parâmetro...
>
O problema na verdade não é meu, eu apenas tentei ajudar apresentando um
case onde utilizo funções no lugar de visões (no meu caso,  utilizo a plsql
para testes e exceções).

Contudo,  sua dica de sessão será muito útil para um outro case de
auditoria onde utilizo tabelas temporárias para armazenar um simples
valor.  Obrigado pela dica!
> Att,
>
> [1] http://www.postgresql.org/docs/current/static/functions-admin.html
> [2] http://pgxn.org/dist/session_variables/0.0.4/
>
> --
>    Fabrízio de Royes Mello         Timbira - http://www.timbira.com.br/
>
>    PostgreSQL: Consultoria, Desenvolvimento, Suporte 24x7 e Treinamento
> _______________________________________________
> 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