Очистка файлов из таблицы без удаления строк в postgresql 9.6.3 - PullRequest
0 голосов
/ 19 сентября 2018

У меня есть таблица с файлами и различные отношения к этой таблице, файлы хранятся как bytea.Я хочу освободить пространство, занимаемое старыми файлами (в соответствии с отметкой времени), однако строки все еще должны присутствовать в таблице.

Достаточно ли для null поля bytea?Будут ли данные фактически удалены из таблицы таким образом?

1 Ответ

0 голосов
/ 19 сентября 2018

В PostgreSQL при обновлении строки создается новый кортеж (версия строки), а старый оставляется для удаления с помощью автоочистки.

Кроме того, более крупные атрибуты bytea будутхраниться вне строки в таблице TOAST , которая принадлежит этой таблице.

Когда для атрибута bytea установлено значение NULL (что является правильным решением), двавещи произойдут:

  • Основной стол станет больше из-за всех новых кортежей, созданных UPDATE.Автовакуум освободит пространство, но не уменьшит таблицу (пустое пространство может быть использовано при будущих модификациях данных).

  • Записи в таблице TOAST будут удалены.Опять же, автовакуум освободит пространство, но стол не будет уменьшаться.

Итак, что вы на самом деле заметите, так это то, что после UPDATE ваш стол занимает больше местачем раньше .

Вы можете избавиться от всего этого пустого пространства, запустив VACUUM (FULL) на столе, но это заблокирует одновременный доступ к таблице на время операции, поэтому будьте готовы кзапланируйте некоторое время простоя (вы, вероятно, все равно это сделаете для UPDATE).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...