PostgreSQL\8.3\bin>psql -U postgres
用户 postgres 密码:
欢迎来到 psql 8.3.4,这是 PostgreSQL 互动式文字终端机。
键入: \copyright 显示发行条款
\h 显示 SQL 命令的说明
\? 显示 pgsql 命令的说明
\g 或者以分号(;)结尾以执行查询
\q 退出
postgres=# create table x_lo (item varchar(64),lo oid);
CREATE TABLE
postgres=# \d
关联列表
架构模式 | 名称 | 型别 | 拥有者
----------+-------------------------------+--------+----------
public | x_lo | 资料表 | postgres
(1 笔资料列)
postgres=# \d x_lo
资料表 "public.x_lo"
栏位 | 型别 | 修饰词
-----+-----------------+--------
item | character varying(64) |
lo | oid |
postgres=# insert into x_lo(item,lo)
postgres-# values('YodaoDict.exe',lo_import('D:\\YodaoDict.exe'));
INSERT 0 1
postgres=# insert into x_lo(item,lo)
postgres-# values('wolf.jpg',lo_import('D:\\wolf.jpg'));
INSERT 0 1
postgres=# insert into x_lo(item,lo)
postgres-# values('windows map.png',lo_import('D:\\windows map.png'));
INSERT 0 1
postgres=# insert into x_lo(item,lo)
postgres-# values('windows server 2008 R2 x64.txt',lo_import('D:\\windows server 2008 R2 x64.txt'));
INSERT 0 1
postgres=# \lo_list
大型物件
ID | 描述
-------+------
23090 |
23091 |
23092 |
23093 |
23094 |
(5 笔资料列)
postgres=# select * from x_lo;
item | lo
--------------------------+-------
YodaoDict.exe | 23090
wolf.jpg | 23092
windows map.png | 23093
windows server 2008 R2 x64.txt | 23094
(4 笔资料列)
postgres=# select lo_export(lo,'D:\\xtest\\'||item) from x_lo;
lo_export
-----------
1
1
1
1
(4 笔资料列)
postgres=# \lo_export(23091,'D:\\xtest\\')
资料库列表
名称 | 拥有者 | 字元编码
--------------+--------+----------
iWealthFount | lyc | UTF8
postgres | postgres | UTF8
template0 | postgres | UTF8
template1 | postgres | UTF8
(4 笔资料列)
\l:忽略多余的参数 "o_export(23091,'D:"
无效的命令 \,用 \? 显示说明。
postgres=# \lo_list
大型物件
ID | 描述
-------+------
23090 |
23091 |
23092 |
23093 |
23094 |
(5 笔资料列)
postgres=# \lo_unlink 23091
lo_unlink 23091
postgres=# \lo_import 'D:\\xtest\\wolf.jpg' 'wolf.jpg'
lo_import 23095
postgres=# \lo_list
大型物件
ID | 描述
-------+----------
23090 |
23092 |
23093 |
23094 |
23095 | wolf.jpg
(5 笔资料列)
postgres=# insert into x_lo(item,lo)
postgres-# values('windows map.png',lo_import('D:\\windows map.png' 'windows map.png'));
错误: 语法错误 在 "'windows map.png'" 或附近的
--看来这样行不通!
postgres=# select item,lo_export(lo,'D:\\xtest\\'||item) from x_lo;
item | lo_export
-------------------------+-----------
YodaoDict.exe | 1
wolf.jpg | 1
windows map.png | 1
windows server 2008 R2 x64.txt | 1
(4 笔资料列)
postgres=# select item,lo_unlink(lo) from x_lo;
item | lo_unlink
-------------------------+-----------
YodaoDict.exe | 1
wolf.jpg | 1
windows map.png | 1
windows server 2008 R2 x64.txt | 1
(4 笔资料列)
postgres=# \lo_list
大型物件
ID | 描述
-------+----------
23095 | wolf.jpg
(1 笔资料列)
postgres=# \lo_unlink 23095
lo_unlink 23095
postgres=# \lo_list
大型物件
ID | 描述
----+------
(0 笔资料列)
【引文】PostgreSQL 8.0.0 文档24.
8.4. 服务器端函数
还有一些对应上面那些客户端函数的服务器端函数,可以在 SQL 命令里使用; 实际上,大多数客户端函数都只是服务器端函数的等效接口。这些服务器端函数中, 通过 SQL 命令调用的实际有用的是 lo_creat, lo_unlink, lo_import,和 lo_export。 下面是一些例子:
CREATE TABLE image ( name text, raster oid);SELECT lo_creat(-1); -- 返回新创建的空的大对象的 OIDSELECT lo_unlink(173454); -- 删除 OID 为 173454 的大对象INSERT INTO image (name, raster) VALUES ('beautiful image', lo_import('/etc/motd'));SELECT lo_export(image.raster, '/tmp/motd') FROM image WHERE name = 'beautiful image';
服务器端的 lo_import 和 lo_export 函数和客户端的那几个有着显著的不同。这辆个函数在服务器的文件系统里读写文件, 使用数据库所有者的权限进行。因此,只有超级用户才能使用他们。相比之下, 客户端的输入和输出函数在客户的文件系统里读写文件,使用客户端程序的权限。 客户端函数可以由任何PostgreSQL用户使用。
--转自