我们决定从OIDPostgreSQL 9.0数据库中的转移到,而改用bytea列。我正在尝试将数据从一列复制到另一列,但是我找不到正确的查询。这是我最近得到的:
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
Run Code Online (Sandbox Code Playgroud)
这给了我以下错误信息:
ERROR: column "pkcs_as_bytea" is of type bytea but expression is of type bytea[]
Run Code Online (Sandbox Code Playgroud)
那么正确的查询是什么?
不需要自定义功能的另一种方法是使用loread(lo_open(...))组合,例如:
UPDATE user SET pkcs_as_bytea = loread(lo_open(pkcs12_as_oid, 262144), 1000000) WHERE thistable.pkcs12 IS NOT NULL
Run Code Online (Sandbox Code Playgroud)
这段代码有问题,该loread函数要求读取的最大字节数(1000000我在上面使用的参数)作为第二个参数,因此,如果数据很大,则应在此处使用一个非常大的数字。否则,将在这么多字节之后修剪内容,并且您不会将所有数据都返回到bytea字段中。
如果要将OID转换为文本字段,还应该使用转换函数,如下所示:
UPDATE user SET pkcs_as_text = convert_from(loread(lo_open(pkcs12_as_oid, 262144), 1000000), 'UTF8')
Run Code Online (Sandbox Code Playgroud)
(以十六进制表示262144打开模式的标志40000,表示“只读打开”)
| 归档时间: |
|
| 查看次数: |
6626 次 |
| 最近记录: |