在Postgresql中获取CLOB OID的TEXT值


8

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

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

该表最初由Hibernate使用@Lob属性作为“答案”列构建。当时我没有意识到,但是以这种方式设置时,Hibernate在列中存储了OID而不是实际的文本。当我使用Hibernate检索值时,一切工作正常,因为它会自动将OID转换为CLOB字符串,但是,这已成为性能问题,我想摆脱OID。

从答案中选择*
编号QUESTION_ID答案
==============================
1123 55123
2234 51614
3 345 56127
应该
编号QUESTION_ID答案
==============================
1123男
2234 203-555-1212
纽约州纽约市3345555

我的愿望是在表“ ANSWER_VALUE TEXT”中添加额外的列,并执行以下操作,将实际值添加到表中,然后将Hibernate更改为不使用@Lob指示符

更新答案集ANSWER_VALUE = getValueFromOID(ANSWER)

该“ getValueFromOID”功能是否存在?如果没有,我能否获得一些有关如何创建一个OID或至少如何获取OID实际值的指示?

谢谢

Answers:


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也不用作数据库所有者。“没有函数匹配给定的名称和参数类型”
约翰·P

可能是因为正确的函数名称是lo_read
Andriy M

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.