PostgreSQL 18 中文参考文档(未翻译部分保留英文)🌐 切换到英文原版 →

33.4. 服务端函数 #

在 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删除大对象