在 Postgresql 中获取 CLOB OID 的 TEXT 值

Joh*_*n P 9 postgresql hibernate

我有一个数据库表,看起来像:

创建表格答案(
   id int 不为空,
   question_id int 不为空,
   回答文本空
)

该表最初是由 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(ANSWER)

那个“getValueFromOID”函数存在吗?如果没有,我能否得到一些关于如何创建一个或至少如何获取 OID 的实际值的指示?

谢谢

Joh*_*n P 10

感谢a_horse_with_no_name。解决办法是:

update answers set answer_value = lo_get(cast(value as bigint))
Run Code Online (Sandbox Code Playgroud)

注意 - 该lo_get函数似乎存在于 Postgres 9.4 或更高版本中。对于早期版本,我没有看到直接执行此操作的方法。我目前正在运行 9.0,但这只是加快了我的升级计划。