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 超出了大对象的实际长度,则返回的值不会被填充到指定的长度。

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()”的评论、建议或更正,请点击这里