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()" 的评论、建议或更正 此处