在 SQL 查询环境中直接操作大对象的核心服务端函数包括:
lo_from_bytea(loid, data)将一个普通的 bytea 二进制值直接写入并创建为一个全新的大对象,返回其分配的 OID。
lo_put(loid, offset, data)在大对象指定字节偏移量位置直接覆盖写入二进制数据片段。
lo_get(loid [, offset, length])从大对象中提取指定区间的二进制切片并作为普通的 bytea 结果返回。
lo_import(filename) 与 lo_export(loid, filename)直接在服务器端文件系统与大对象之间导入或导出文件。请注意这两个服务端函数访问的是数据库宿主物理服务器上的本地文件系统,默认仅限超级用户调用。
在 SQL 语句中使用大对象的经典范例:
CREATE TABLE image (
name text,
raster oid
);
-- 从服务端文件系统导入大对象
INSERT INTO image (name, raster)
VALUES ('beautiful image', lo_import('/etc/motd'));
-- 导出大对象至服务端路径
SELECT lo_export(image.raster, '/tmp/motd') FROM image
WHERE name = 'beautiful image';
-- 销毁大对象
SELECT lo_unlink(image.raster) FROM image WHERE name = 'beautiful image';
Table 33.1. 大对象服务端 SQL 函数
| 函数名称 | 参数类型 | 描述 |
|---|---|---|
lo_from_bytea(oid, bytea) | oid, bytea | 从 bytea 数据直接创建大对象 |
lo_get(oid, [bigint, integer]) | oid | 将大对象或其切片内容提取为 bytea |
lo_put(oid, bigint, bytea) | oid, bigint, bytea | 在指定偏移量处向大对象写入 bytea |
lo_unlink(oid) | oid | 删除大对象 |