32.4. 服务器端函数

对应着上面介绍的客户端函数,在服务器端也有相应的可从SQL调用的函数。事实上,大部分客户端函数就是等价的服务器端函数的简化接口。真正能从SQL命令调用的是: lo_creat, lo_create, lo_unlink, lo_import以及 lo_export. 下面是使用它们的例子:

CREATE TABLE image (
    name            text,
    raster          oid
);

SELECT lo_creat(-1);       -- 返回新的空大对象的OID

SELECT lo_create(43213);   -- 尝试创建OID为43213的大对象

SELECT lo_unlink(173454);  -- 删除OID为173454的大对象

INSERT INTO image (name, raster)
    VALUES ('beautiful image', lo_import('/etc/motd'));

INSERT INTO image (name, raster)  -- 和上面相同,但是指定了使用的OID
    VALUES ('beautiful image', lo_import('/etc/motd', 68583));

SELECT lo_export(image.raster, '/tmp/motd') FROM image
    WHERE name = 'beautiful image';

服务器端的lo_importlo_export函数具有和它们的客户端同类大不相同的行为。这两个函数从服务器的文件系统中读和写文件,使用的是数据库所有者的权限。因此,它们的使用被限制于超级用户。相反,客户端的导入和导出函数读写的是客户端的文件系统,使用的是客户端程序的权限。因此客户端函数不需要超级用户权限。

函数lo_readlo_write的功能也可以在服务器端调用,但是在服务器端的名称与客户端接口不同:它们的名称中不包含下划线。我们必须以loreadlowrite调用这些函数。