Получить текстовое значение CLOB OID в Postgresql


8

У меня есть таблица базы данных, которая выглядит так:

создать таблицу ответов (
   id int не нуль,
   question_id int не null,
   текст ответа ноль
)

Эта таблица была изначально создана Hibernate с использованием атрибута @Lob для столбца «answer». В то время я этого не осознавал, но при такой настройке Hibernate сохраняет в столбце OID вместо реального текста. Все отлично работает, когда я использую Hibernate для получения значений, поскольку он автоматически преобразует OID в строку CLOB, однако это становится проблемой производительности, и я хотел бы избавиться от OID.

выберите * из ответов
ID QUESTION_ID ОТВЕТ
===============================
1 123 55123
2 234 51614
3 345 56127
должно быть
ID QUESTION_ID ОТВЕТ
===============================
1 123 Мужской
2 234 203-555-1212
3 345 555 Main St. New York, NY

Я хочу добавить дополнительный столбец в таблицу «ANSWER_VALUE TEXT» и сделать что-то вроде ниже, чтобы получить фактическое значение в таблице, а затем изменить Hibernate, чтобы не использовать указатель @Lob

обновить набор ответов ANSWER_VALUE = getValueFromOID (ОТВЕТ)

Существует ли эта функция "getValueFromOID"? Если нет, могу ли я получить некоторые советы о том, как создать один или хотя бы как получить действительное значение OID?

Спасибо

Ответы:


10

Спасибо идет к a_horse_with_no_name . Решение:

update answers set answer_value = lo_get(cast(value as bigint))

Примечание - эта lo_getфункция присутствует в Postgres 9.4 или выше. Для более ранних версий я не вижу способа сделать это напрямую. В настоящее время я использую 9.0, но это ускорило мои планы по обновлению.



Похоже, что loread не доступен для меня ни как postgres, ни как владелец базы данных. «Ни одна функция не соответствует заданному имени и типу аргумента»
Джон П

Возможно, это потому, что правильное имя функции lo_read.
Андрей М

Документация для lo_get находится здесь: postgresql.org/docs/9.6/static/lo-funcs.html
Freiheit,
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.