PostgreSQL 9.4.4 中文手册 | |||
---|---|---|---|
上一页 | 上一级 | 章 32. 大对象 | 下一页 |
为操作SQL大对象而改变的服务器端函数在表 32-1中列出。
表 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
调用这些函数。