首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PostgreSQL:从OID到Bytea

PostgreSQL:从OID到Bytea
EN

Stack Overflow用户
提问于 2011-02-18 20:09:19
回答 4查看 8.5K关注 0票数 4

我们已经决定从PostgreSQL 9.0数据库中的OID转移到使用bytea列。我试图将数据从一列复制到另一列,但我找不到正确的查询。这是我最接近的一次:

代码语言:javascript
复制
update user as thistable set pkcs_as_bytea = (select array_agg(mylargeobject.data) from 
  (select * from pg_largeobject where loid = thistable.pkcs12_as_oid order by pageno) as mylargeobject) where thistable.pkcs12 is not null

这给出了以下错误消息:

代码语言:javascript
复制
ERROR:  column "pkcs_as_bytea" is of type bytea but expression is of type bytea[]

那么什么才是正确的查询呢?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2011-02-21 20:04:08

下面是一个实现此魔术的存储过程:

代码语言:javascript
复制
CREATE OR REPLACE FUNCTION merge_oid(val oid) 
returns bytea as $$
declare merged bytea;
declare arr bytea;
 BEGIN  
   FOR arr IN SELECT data from pg_largeobject WHERE loid = val ORDER BY pageno LOOP
     IF merged IS NULL THEN
       merged := arr;
     ELSE
       merged := merged || arr;
     END IF;
   END LOOP;
  RETURN merged;

END  
$$ LANGUAGE plpgsql;
票数 1
EN

Stack Overflow用户

发布于 2012-04-29 02:38:35

另一种不需要自定义函数的方法是使用loread(lo_open(...))组合,例如:

代码语言:javascript
复制
UPDATE user SET pkcs_as_bytea = loread(lo_open(pkcs12_as_oid, 262144), 1000000) WHERE thistable.pkcs12 IS NOT NULL

这段代码有一个问题,loread函数需要读取的最大字节数作为第二个参数(我上面使用的1000000参数),所以如果你的数据很大,你应该在这里使用一个非常大的数字。否则,内容将在这么多字节之后被裁剪,并且您无法将所有数据返回到bytea字段中。

如果要从OID转换为文本字段,还应使用转换函数,如下所示:

代码语言:javascript
复制
UPDATE user SET pkcs_as_text = convert_from(loread(lo_open(pkcs12_as_oid, 262144), 1000000), 'UTF8')

(262144是开放模式的标志,十六进制的40000,意思是“打开只读”)

票数 5
EN

Stack Overflow用户

发布于 2019-02-27 18:53:57

嗯,我做过这样的事情。我有附件表和带有oid类型数据的content列。我迁移的时候有四个动作:

代码语言:javascript
复制
ALTER TABLE attachment add column content_bytea bytea
UPDATE attachment SET content_bytea = lo_get(content)
ALTER TABLE attachment drop column content
ALTER TABLE attachment rename column content_bytea to content
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5041099

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档