Postgresql - изменить тип столбца с oid на bytea с сохранением данных

Сейчас я разрабатываю приложение, которое использует hibernate + postgresql для сохранения данных. Нам нужно сохранить несколько сериализуемых HashMap, поэтому для этой цели использовался LOB (oid). Но из-за некоторых проблем с удалением oid в postgresql мы решили сохранить эти данные как bytea вместо oid. Итак, вопрос в том, как лучше всего изменить тип столбца с oid на bytea с сохранением старых данных? Если кто-то может дать рабочий скрипт / решение для такого переноса данных, это будет здорово.

Заранее спасибо.


person Vladimir    schedule 30.07.2012    source источник
comment
Вы пробовали Vacuumlo и lo модулей? В большинстве случаев они должны обеспечивать автоматическое управление данными LO.   -  person A.H.    schedule 30.07.2012
comment
Да, мы пробовали вакуум, но столкнулись с проблемой: поскольку у нас высокая нагрузка чтения / записи в базе данных, вакуум не может завершить очистку при работающей базе данных и дает сбой.   -  person Vladimir    schedule 31.07.2012
comment
Странно, потому что вместе с lo_manage триггером из lo это управление должно происходить в самой исходной транзакции - по крайней мере, большую часть времени. Конечно, только vacuumlo не годится для этой работы.   -  person A.H.    schedule 31.07.2012


Ответы (2)


lobs, вероятно, является неправильным решением для сериализуемых хэш-карт, если вам не нужно выполнять поиск со смещениями. Bytea чище. Проблема в том, что вам, вероятно, придется какое-то время, чтобы что-то переключить.

Что я, вероятно, сделал бы, так это создать новый столбец и скопировать данные, а затем разорвать связь, а затем отбросить старый столбец. Затем запустите соответствующие задания по вакуумированию.

person Chris Travers    schedule 05.09.2012

Я была такая же проблема. Итак, я сделал это с четырьмя запросами с созданием буферизованного столбца

ALTER TABLE attachment add column content_bytea bytea
UPDATE attachment SET content_bytea = lo_get(content)
ALTER TABLE attachment drop column content
ALTER TABLE attachment rename column content_bytea to content
person Ilya Khudyakov    schedule 27.02.2019