web-dev-qa-db-ja.com

CLOBのTEXT値を取得OID

次のようなデータベーステーブルがあります。

テーブルの回答を作成します(
 id int not null、
 question_id int not null、
 answer text null 
)

このテーブルは、Hibernateによって「answer」列の@Lob属性を使用して最初に作成されました。そのときは気づきませんでしたが、そのように設定すると、Hibernateは実際のテキストではなくOIDを列に格納します。Hibernateを使用して値を取得すると、すべて正常に機能します。 OIDをCLOB文字列に自動的に変換しますが、パフォーマンスの問題になりつつあり、OIDを削除したいと思います。

選択*回答から
 ID QUESTION_ID ANSWER 
 ============================ === 
 1 123 55123 
 2 234 51614 
 3 345 56127 
は
 ID QUESTION_ID ANSWER 
である必要があります=== ============================ 
 1 123男性
 2 234 203-555-1212 
 3 345 555 Main St. New York、NY 
 

私の望みは、テーブル「ANSWER_VALUE TEXT」に追加の列を追加し、実際の値をテーブルに取得するために以下のようなことを行い、@ Lob指定子を使用しないようにHibernateを変更することです。

更新の回答セットANSWER_VALUE = getValueFromOID(ANSWER)

その「getValueFromOID」関数は存在しますか?そうでない場合、どのように作成するか、少なくともOIDの実際の値をフェッチする方法について、いくつかの指針を得ることができますか?

ありがとう

8
John P

a_horse_with_no_name に感謝します。解決策は次のとおりです。

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

注-lo_get関数はPostgres 9.4以降に存在するようです。以前のバージョンでは、これを直接行う方法がわかりません。私は現在9.0を実行していますが、これは私のアップグレード計画を加速させました。

10
John P