В PostgreSQL при обновлении строки создается новый кортеж (версия строки), а старый оставляется для удаления с помощью автоочистки.
Кроме того, более крупные атрибуты bytea
будутхраниться вне строки в таблице TOAST , которая принадлежит этой таблице.
Когда для атрибута bytea
установлено значение NULL (что является правильным решением), двавещи произойдут:
Основной стол станет больше из-за всех новых кортежей, созданных UPDATE
.Автовакуум освободит пространство, но не уменьшит таблицу (пустое пространство может быть использовано при будущих модификациях данных).
Записи в таблице TOAST будут удалены.Опять же, автовакуум освободит пространство, но стол не будет уменьшаться.
Итак, что вы на самом деле заметите, так это то, что после UPDATE
ваш стол занимает больше местачем раньше .
Вы можете избавиться от всего этого пустого пространства, запустив VACUUM (FULL)
на столе, но это заблокирует одновременный доступ к таблице на время операции, поэтому будьте готовы кзапланируйте некоторое время простоя (вы, вероятно, все равно это сделаете для UPDATE
).