Digamos que eu queira CLUSTER
uma mesa. Não há como saber quanto tempo vai demorar, então eu apenas executo. Depois de algumas horas, preciso dos dados, então cancelo o CLUSTER
comando. O CLUSTERing funciona com tabelas/arquivos temporários de tal forma que, se eu cancelar antes de terminar, tudo isso é apagado e as horas de execução são desperdiçadas ou faz alterações "ao vivo" de modo que o cancelamento após algumas horas não seja um desperdício total de tempo?
relate perguntas
-
Posso ativar o PITR depois que o banco de dados foi usado
-
Práticas recomendadas para executar a replicação atrasada do deslocamento de tempo
-
Os procedimentos armazenados impedem a injeção de SQL?
-
Sequências Biológicas do UniProt no PostgreSQL
-
Qual é a diferença entre a replicação do PostgreSQL 9.0 e o Slony-I?
Se você chamou
CLUSTER
sem parâmetros, não podeROLLBACK
, pois isso só é aplicável a transações. Citando o manual:Mas você fala sobre "
CLUSTER
uma mesa" , então supondo que você queira dizer o formulário:O que é transacional. Cancelar este comando não deve causar nenhum dano . O Postgres constrói a nova tabela (e índices) em segundo plano e só atualiza as referências aos arquivos físicos quando terminar. O manual novamente:
Minha ênfase em negrito. Mas o trabalho que foi para as tabelas temporárias é perdido quando você cancela o comando antes que ele possa terminar.
CLUSTER
nem atualiza as estatísticas da tabela, e é por isso que você provavelmente deve executarANALYZE
na tabela apósCLUSTER
.Relativo:
Você pode estar interessado em
pg_repack
, que pode fazer o mesmo queCLUSTER
sem travas exclusivas, para que você possa usá-lo sem se encurralar - ou mesmo quando não puder arcar com o tempo de inatividade.A extensão não é fornecida com o Postgres, no entanto. Você tem que instalá-lo sozinho. Não está disponível em muitos serviços em nuvem.
Relacionado: