PostgreSQL 大对象或bytea存取pdf,jpg等文件 - PostgreSQL export regular file like pdf, word, text, doc stored in bytea type

less than 1 minute read

背景

群里一位兄弟问到的关于导出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/

Flag Counter

digoal’s 大量PostgreSQL文章入口