在客户端通过 libpq 访问大对象的 API 模仿了经典的 Unix 文件系统接口规范:
lo_creat / lo_create:创建全新大对象并返回其 OID 标识。
lo_import / lo_export:在客户端操作系统物理文件与数据库大对象之间执行全量高速导入或导出。
lo_open:打开已有大对象并返回专用的文件描述符(支持只读 INV_READ 或可写 INV_WRITE 模式)。
lo_write 与 lo_read:从当前文件指针位置向大对象流式写入或读取指定字节数据。
lo_lseek64 与 lo_tell64:移动或查询当前大对象的 64 位字节读写偏移量指针。
lo_truncate64:就地将大对象截断调整为指定字节长度。
lo_close:关闭大对象文件描述符。
lo_unlink:根据 OID 物理删除并销毁大对象。
所有使用文件描述符操作大对象的函数必须在显式事务块内部执行(即在 BEGIN ... COMMIT 之间),因为大对象文件描述符仅在单次事务生命周期内有效,事务提交或回滚时所有已打开的大对象描述符将被系统自动关闭。
函数 lo_creat() 与 lo_create() 用于在数据库中分配一个全新的大对象并返回其专属 OID 标识符。
函数 lo_import() 用于将操作系统客户端本地文件系统中的文件内容直接读取并作为大对象存入数据库。
函数 lo_export() 用于将数据库中的大对象完整读取并写出到操作系统客户端本地文件系统中。
函数 lo_open() 用于打开一个既有的大对象以供后续读写,成功时返回一个非负整数的大对象描述符(类似于 Unix 文件描述符)。
函数 lo_write() 从指定的内存缓冲区向打开的大对象当前写入位置写入指定字节数的数据。
函数 lo_read() 从打开的大对象当前读取位置抓取指定字节数的数据并填充到调用方提供的内存缓冲区中。
函数 lo_lseek() 与 64 位版本的 lo_lseek64() 用于改变大对象内部当前的读写游标偏移量。
函数 lo_tell() 与 64 位版本的 lo_tell64() 用于获取大对象当前内部读写游标相对于起始位置的字节偏移量。
函数 lo_truncate() 与 64 位版本的 lo_truncate64() 用于将大对象的物理存储尺寸强制截断或扩展为指定的字节长度。
函数 lo_close() 用于关闭一个先前打开的大对象描述符,并释放其在服务端占用的句柄资源。
函数 lo_unlink() 用于从数据库中彻底物理销毁指定 OID 的大对象并回收其全部磁盘存储碎片。