Next: , Up: Examples   [Index]


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);