32.4. Server-side Functions
Server-side functions tailored for manipulating large objects from SQL are listed in Table 32-1.
Table 32-1. SQL-oriented Large Object Functions
Function | Return Type | Description | Example | Result |
---|---|---|---|---|
lo_create(loid
oid, string bytea) |
oid | Create a large object and store data there, returning its OID. Pass 0 to have the system choose an OID. | lo_create(0, E'\\xffffff00') | 24528 |
lo_put(loid
oid, offset bigint,
str bytea) |
void | Write data at the given offset. | lo_put(24528, 1, E'\\xaa') | |
lo_get(loid
oid [,
from bigint, for
int]) |
bytea | Extract contents or a substring thereof. | lo_get(24528, 0, 3) | \xffaaff |
There are additional server-side functions corresponding to
each of the client-side functions described earlier; indeed, for
the most part the client-side functions are simply interfaces to
the equivalent server-side functions. The ones just as convenient
to call via SQL commands are lo_creat
, lo_create
, lo_unlink
, lo_import
, and lo_export
. Here are examples of their use:
CREATE TABLE image ( name text, raster oid ); SELECT lo_creat(-1); -- returns OID of new, empty large object SELECT lo_create(43213); -- attempts to create large object with OID 43213 SELECT lo_unlink(173454); -- deletes large object with OID 173454 INSERT INTO image (name, raster) VALUES ('beautiful image', lo_import('/etc/motd')); INSERT INTO image (name, raster) -- same as above, but specify OID to use VALUES ('beautiful image', lo_import('/etc/motd', 68583)); SELECT lo_export(image.raster, '/tmp/motd') FROM image WHERE name = 'beautiful image';
The server-side lo_import
and
lo_export
functions behave
considerably differently from their client-side analogs. These
two functions read and write files in the server's file system,
using the permissions of the database's owning user. Therefore,
their use is restricted to superusers. In contrast, the
client-side import and export functions read and write files in
the client's file system, using the permissions of the client
program. The client-side functions do not require superuser
privilege.
The functionality of lo_read
and
lo_write
is also available via
server-side calls, but the names of the server-side functions
differ from the client side interfaces in that they do not
contain underscores. You must call these functions as
loread
and lowrite
.