Как отобразить LOB в Hibernate и Postgresql, чтобы очистить неиспользуемое пространство

Если у вас есть тип Лоб

@Column(name = "xml")
@Lob
private String xml;

затем в PostgreSQL вы получите столбец с текстом типа

 \d tablename
 Column     |            Type             | Modifiers 
 ----------------+-----------------------------+-----------
 xml            | text                        | 

Когда вы вставляете некоторый текст в этот столбец, тогда создается большой объект, и столбец содержит ссылку на этот объект.

# select * from  tablename
xml
+------------
 242781
(1 row)

В этом посте предлагается использовать утилиту вакуума для очистки больших объектов, которые соответствуют удаленным строкам. Но согласно этой документации

Затем он просматривает все столбцы в базе данных, имеющие тип oid или lo, и удаляет совпадающие записи из временной таблицы. (Примечание: рассматриваются только типы с этими именами; в частности, домены над ними не рассматриваются.)

Таким образом, если вы запустите вакуум на базе данных, содержащей текстовый столбец, все большие объекты будут удалены, так как они являются ссылками из текстового столбца, а не oid. Так что вопрос, как я должен сопоставить объект LOB в спящем режиме, чтобы разрешить очистить неиспользуемое пространство

Я проверил с Postgresql 9.3.4 и Hibernate 4.3.5

0 ответов

Другие вопросы по тегам