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.

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...

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

Responder a