2) o planejador não gosta de between para excluir partições,
        tente usar comparações simples com = < >



Uh? Como assim? Pelo menos nas versões mais recentes `foo BETWEEN bar
AND baz` é exatamente equivalente a `foo >= bar AND foo <= baz`. Não
vejo como isso afetaria o particionamento, será que pode ter sido mudado
em versões mais recentes?

    Nem do between nem do extract(year from... )


Do BETWEEN tudo bem, mas do EXTRACT realmente não vai dar certo. No caso
de particionamento de datas é melhor usar o campo data diretamente e
compará-lo sem passar por funções, a não ser que nas consultas você
sempre utilize a função também, mas ficaria trabalhoso:

     SELECT ... FROM ... WHERE extract(year from dt) = 2014 AND dt =
'2014-07-03 00:00:00';

Num rola né?!

    Mas no caso do between ele converteu pra >= e <=


Sim, eu não espero nenhuma diferença em termos de performance usando
BETWEEN ou o par >= e <=. Até olhando no gram.y, dá pra ver que é uma
transformação feita direto no parser [1]. Fico imaginando agora se estou
deixando algo bobo passar.

A última vez que fiz um particionamento brabo envolvendo datas na chave de particionamento foi com a versão 8.3. Se eu usasse between, o planejador não excluía as partições indesejadas e, por isso, eu usava sempre os comparadores mais simples.

Acredito que a coisa mudou a partir da versão 8.4 quando foi inserido o modo partition para a GUC constraint_exclusion mas não estou com tempo pra olhar o fonte e pesquisar agora, todavia, nas versões mais recentes, Matheus já nos deu a prosa ;)

[]s
Flavio Gurgel



_______________________________________________
pgbr-geral mailing list
[email protected]
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

Responder a