gpt4 book ai didi

postgresql - Postgres : update value of TEXT column (CLOB)

转载 作者:行者123 更新时间:2023-12-05 04:03:48 30 4
gpt4 key购买 nike

我有一个 TEXT 类型的列,它应该代表一个 CLOB 值,我正在尝试像这样更新它的值:

UPDATE my_table SET my_column = TEXT 'Text value';

通常此专栏由 Hibernate 写入和读取,我注意到用 Hibernate 写入的值存储为整数(可能是对 CLOB 数据的一些内部 Postgres 引用)。

但是当我尝试使用上述 SQL 更新列时,该值存储为字符串,当 Hibernate 尝试读取它时,我收到以下错误:Bad value for type long : ["Text value "]

我尝试了描述的所有选项 in this answer但结果总是一样的。如何使用 SQL 插入/更新 TEXT 列?

最佳答案

为了更新由 Hibernate 创建的 cblob,您应该使用函数来处理大对象:

可以在以下链接中找到文档:

https://www.postgresql.org/docs/current/lo-interfaces.html
https://www.postgresql.org/docs/current/lo-funcs.html

例子:

查询:

select mytable.*,  convert_from(loread(lo_open(mycblobfield::int, x'40000'::int), x'40000'::int),  'UTF8') from mytable where mytable.id = 4;

观察:
x'40000'对应读模式(INV_WRITE)

要更新:

select lowrite(lo_open(16425, x'60000'::int), convert_to('this an updated text','UTF8'));

观察:
x'60000' = INV_WRITE + INV_READ 对应读写模式(INV_WRITE + IV_READ)。
数字 16425 是一个示例 loid(大对象 ID),它已经存在于您表中的记录中。这是您可以在 Hinernate 创建的 blob 字段中看到的整数值。

插入:

select lowrite(lo_open(lo_creat(-1), x'60000'::int), convert_to('this is a new text','UTF8'));

观察:
lo_creat(-1) 生成一个新的大对象 a 返回它的 loid

关于postgresql - Postgres : update value of TEXT column (CLOB),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53262566/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com