Postgresql
從 bytea 列導出圖像文件
我正在嘗試從 PostgreSQL 數據庫中導出圖像文件。該
users_data_circulation
表有一個photo
(bytea) 列。我的命令:
copy (select encode(photo,'hex') from users_data_circulation limit 1) TO '/tmp/imagetest.hext';
在作業系統中:
$> xxd -p -r /tmp/imagetest.hex > /tmp/imagetest.jpg $> file /tmp/imagetest.jpg /tmp/imagetest.jpg: ASCII TEXT
我無法打開
jpg
文件。如何將此文件轉換為jpg?devinim@devinimpostgresql:~$ hexdump -C /tmp/image.hex | more 00000000 5c 5c 33 37 37 5c 5c 33 33 30 5c 5c 33 37 37 5c |\\377\\330\\377\| 00000010 5c 33 34 30 5c 5c 30 30 30 10 4a 46 49 46 5c 5c |\340\\000.JFIF\\| 00000020 30 30 30 01 02 5c 5c 30 30 30 5c 5c 30 30 30 01 |000..\\000\\000.| 00000030 5c 5c 30 30 30 01 5c 5c 30 30 30 5c 5c 30 30 30 |\\000.\\000\\000| 00000040 5c 5c 33 37 37 5c 5c 33 34 31 5c 5c 30 30 30 5c |\\377\\341\\000\| 00000050 76 50 49 43 5c 5c 30 30 30 02 5c 6e 5c 6e 01 5c |vPIC\\000.\n\n.\| 00000060 5c 30 30 30 5c 5c 33 37 37 5c 5c 33 37 36 5c 5c |\000\\377\\376\\| 00000070 30 30 30 21 50 69 63 74 75 72 65 20 45 6c 65 6d |000!Picture Elem| 00000080 65 6e 74 73 2c 20 49 6e 63 2e 20 49 53 45 2f 53 |ents, Inc. ISE/S| ... continues like that
在數據庫中儲存 jpeg 是一個可怕的想法。
也就是說,如果你想從數據庫中取出它,你可以使用 psql。這將其作為十六進制輸出。
psql -t -A -o "/tmp/imagetest.jpg" -c \ "SELECT photo FROM users_data_circulation LIMIT 1";
您可能還想查看大對象。
DO $$ DECLARE l_lob_id OID; r record; BEGIN for r in select data, filename from bytea_table LOOP l_lob_id:=lo_from_bytea(0,r.data); PERFORM lo_export(l_lob_id,'/home/...'||r.filename); PERFORM lo_unlink(l_lob_id); END LOOP; END; $$