lo_get() 是一个系统函数,用于提取大对象的全部或部分内容。
lo_get() 在 PostgreSQL 9.4 中添加。
用法
lo_get (loidoid[,offsetbigint,lengthinteger] ) →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 超出了大对象的实际长度,则返回的值不会被填充到指定的长度。
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方式的大对象函数
