次のようなデータベーステーブルがあります。
テーブルの回答を作成します( 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の実際の値をフェッチする方法について、いくつかの指針を得ることができますか?
ありがとう
a_horse_with_no_name に感謝します。解決策は次のとおりです。
update answers set answer_value = lo_get(cast(value as bigint))
注-lo_get
関数はPostgres 9.4以降に存在するようです。以前のバージョンでは、これを直接行う方法がわかりません。私は現在9.0を実行していますが、これは私のアップグレード計画を加速させました。