| PostgreSQL 9.4.4 文档 | |||
|---|---|---|---|
| Prev | Up | Chapter 32. 大对象 | Next | 
Table 32-1中列出了为从 SQL 操纵大对象定制的服务器端函数。
Table 32-1. 面向 SQL 的大对象函数
| 函数 | 返回类型 | 描述 | 实例 | 结果 | 
|---|---|---|---|---|
       
       lo_from_bytea(loid oid, string bytea)
       | oid | 创建一个大对象并且在其中存储数据,返回它的 OID。 传递0会让系统选择一个 OID。 | lo_from_bytea(0, E'\\xffffff00') | 24528 | 
       
       lo_put(loid oid, offset bigint, str bytea)
       | void | 在给定的偏移位置写入数据。 | lo_put(24528, 1, E'\\xaa') | |
       
       lo_get(loid oid [, from bigint, for int])
       | bytea | 在其中抽取内容或一个子串。 | lo_get(24528, 0, 3) | \xffaaff | 
   之前描述过的每个客户端函数都有一个相应的服务器端函数。实际上,
   多半客户端函数都是等效的服务器端函数的简单接口。这些可以从 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调用这些函数。