32.4. 服务器端函数

还有一些对应上面那些客户端函数的服务器端函数, 可以在SQL命令里使用;实际上,大多数客户端函数都只是服务 器端函数的等效接口。这些服务器端函数中, 通过SQL命令调用的实际有用的是 lo_creat, lo_create, lo_unlink, lo_importlo_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)  -- same as above, but specify OID to use
    VALUES ('beautiful image', lo_import('/etc/motd', 68583));

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

服务器端的lo_importlo_export函数和客户端的那几个有着显著的不同。 这两个函数在服务器的文件系统里读写文件, 使用数据库所有者的权限进行。因此,只有超级用户才能使用他们。 相比之下,客户端的输入和输出函数在客户的文件系统里读写文件, 使用客户端程序的权限。客户端函数不需要超级用户权限。