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
