lo_get()

从大对象中提取数据的函数

lo_get() 是一个用于提取大对象全部或部分内容的系统函数。

lo_get()PostgreSQL 9.4 中添加。

用法

lo_get ( loid oid [, offset bigint, length integer ] ) → bytea

如果提供了无效的大对象 OID,则会引发错误。如果offset 值超出大对象的末尾,则将返回空 bytea 值。

更改历史记录

示例

给定以下大对象

postgres=# SELECT lo_from_bytea(0, '\x48656c6c6f20776f726c64210a');
 lo_from_bytea 
---------------
         16414

postgres=# SELECT *, encode(data, 'escape') FROM pg_largeobject WHERE loid = 16414;
 loid  | pageno |             data             |    encode    
-------+--------+------------------------------+--------------
 16414 |      0 | \x48656c6c6f20776f726c64210a | Hello world!+
       |     

lo_get() 可以这样使用

postgres=# SELECT lo_get(16414);
            lo_get            
------------------------------
 \x48656c6c6f20776f726c64210a
(1 row)

postgres=# SELECT encode(lo_get(16414, 6, 5), 'escape');
 encode 
--------
 world
(1 row)

提供超出大对象末尾的偏移量

postgres=# SELECT lo_get(16414, 999, 5);
 lo_get 
--------
 \x
(1 row)

如果指定的length 超出大对象的实际长度,则返回的值不会被填充到指定的length

postgres=# SELECT lo_get(16414, 0, 99);
            lo_get            
------------------------------
 \x48656c6c6f20776f726c64210a
(1 row)

不允许使用负偏移量和长度

postgres=# SELECT lo_get(16414, -1, 5);
ERROR:  invalid large object seek target: -1

postgres=# SELECT lo_get(16414, 0, -1);
ERROR:  requested length cannot be negative

提供不存在的大对象的 OID

postgres=# SELECT lo_get(9999);
ERROR:  large object 9999 does not exist

分类

bytea大对象系统函数

反馈

提交关于 "lo_get()" 的任何评论、建议或更正 此处