PostgreSQL 大对象或bytea存取pdf,jpg等文件 - PostgreSQL export regular file like pdf, word, text, doc stored in bytea type
背景
群里一位兄弟问到的关于导出bytea字段的问题, 例如它在数据库中使用bytea存储了pdf, text文档等. 需求是导出这类文件.
使用lo_export可以导出.
测试如下 :
1. 创建测试表.
digoal=# create table bytea_test(id int, info bytea);
CREATE TABLE
2. 写入bytea.
digoal=# insert into bytea_test values (1, pg_read_binary_file('postgresql.conf'));
INSERT 0 1
将$PGDATA/postgresql.conf文件写入到bytea_test表.
3. 将bytea插入大对象
digoal=# begin;
BEGIN
digoal=# select lo_creat(-1);
lo_creat
----------
33301
(1 row)
digoal=# select lo_open(33301,131072);
lo_open
---------
0
(1 row)
digoal=# select lowrite(0,info) from bytea_test where id=1;
lowrite
---------
20273
(1 row)
digoal=# select lo_close(0);
lo_close
----------
0
(1 row)
digoal=# end;
COMMIT
4. 使用lo_export导出大对象.
digoal=# \lo_export 33301 '/home/pg93/20130625.conf'
lo_export
5. 比较文件是否一致.
pg93@db-172-16-3-33-> md5sum /home/pg93/20130625.conf
b9d8f424843d5fd6311659619f567592 /home/pg93/20130625.conf
pg93@db-172-16-3-33-> md5sum $PGDATA/postgresql.conf
b9d8f424843d5fd6311659619f567592 /pgdata1999/postgresql.conf
##参考
1. http://blog.163.com/digoal@126/blog/static/16387704020130931040444/