PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

Atualizações no local com PostgreSQL


Apenas os campos armazenados em linha precisam ser copiados. Para campos armazenados fora de linha nas tabelas TOAST, apenas a referência à entrada TOAST é copiada.

Se um campo é armazenado fora de linha depende do tamanho do valor no campo e do tipo de dados do campo.

Se as tuplas forem grandes, mas tiverem apenas alguns campos - como
some_id integer,
frequently_updated integer,
charblob text

então não há muito sentido em mudar nada porque as atualizações de frequently_updated geralmente não reescreverá os dados em charblob , pelo menos se for grande o suficiente para valer a pena cuidar.

OTOH, se você tiver uma tabela com muitos campos, estará reescrevendo muito mais a cada atualização.

HOT só irá ajudá-lo de forma limitada porque uma atualização HOT só pode acontecer quando nenhuma coluna atualizada faz parte de um índice e há espaço livre suficiente na mesma página do banco de dados. Para linhas largas, você não caberá muitas cópias em uma página, mesmo com TOAST, então HOT terá um benefício limitado.

Pode valer a pena separar esses campos em tabelas separadas se eles forem atualizados com frequência, mas o restante da tabela tiver linhas largas que não mudam muito.