Получить текстовое значение 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()? postgresql.org/docs/9.0/static/lo-funcs.html
a_horse_with_no_name
Похоже, что loread не доступен для меня ни как postgres, ни как владелец базы данных. «Ни одна функция не соответствует заданному имени и типу аргумента»
Джон П
Возможно, это потому, что правильное имя функции lo_read.
Андрей М
Документация для lo_get находится здесь: postgresql.org/docs/9.6/static/lo-funcs.html
Freiheit,