lo_get()
是一个用于提取大对象全部或部分内容的系统函数。
lo_get()
在PostgreSQL 9.4 中添加。
用法
lo_get (loid
oid
[,offset
bigint
,length
integer
] ) →bytea
如果提供了无效的大对象 OID,则会引发错误。如果offset
值超出大对象的末尾,则将返回空 bytea
值。
更改历史记录
- PostgreSQL 9.4
- 添加 (提交 c50b7c09)
示例
给定以下大对象
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
参考
- PostgreSQL 文档: 面向 SQL 的大对象函数