7.4.1 Large objects
# connect
conn = pq_connect (setdbopts ("dbname", "test"));
# create table to store large object oids
pq_exec_params (conn, "create table programs (name text, image oid);")
# start transaction, so we don't miss storing the oid
pq_exec_params (conn, "begin;")
# download image, pipe it to a large objects and note its oid
# (you need `wget' to be installed)
oid = pq_lo_import (conn,
"wget -q -O - https://www.gnu.org/software/octave/img/example-mesh.svg |")
# write oid and program name into the table
pq_exec_params (conn,
"insert into programs values ($1, $2);", {"Octave", oid})
# finish transaction
pq_exec_params (conn, "commit;")
# find and retrieve the oid searching for the program name
foid = pq_exec_params (conn,
"select image from programs where name = $1;",
{"Octave"}).data{1}
# view large object corresponding to found foid
# (you need `eog' to be installed, or change to another program able to
# display `.svg')
pq_lo_view (conn, foid, "eog")
# cleanup (we don't use `begin;' and `rollback;' since the
# example should show an inner transaction instead)
pq_lo_unlink (conn, oid);
pq_exec_params (conn, "drop table programs;");
pq_close (conn);