表 34.1中列出了为从 SQL 操纵大对象定制的服务器端函数。
表 34.1. 面向 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_import
和lo_export
函数具有和它们的客户端同类大不相同的行为。这两个函数从服务器的文件系统中读和写文件,使用的是数据库所有者的权限。因此,它们的使用被限制于超级用户。相反,客户端的导入和导出函数读写的是客户端的文件系统,使用的是客户端程序的权限。因此客户端函数不需要超级用户权限。
函数lo_read
和
lo_write
的功能也可以在服务器端调用,但是在服务器端的名称与客户端接口不同:它们的名称中不包含下划线。我们必须以loread
和lowrite
调用这些函数。