31.4. Серверные функции
Функции, предназначенные для работы с большими объектами на стороне сервера из SQL, перечислены в Таблице 31.1.
Таблица 31.1. SQL-ориентированные функции для работы с большими объектами
Каждой из клиентских функций, описанных ранее, соответствуют дополнительные функции на стороне сервера; на самом деле, по большей части клиентские функции представляют собой просто интерфейсы к равнозначным серверным функциям. К функциям, которые так же удобно вызывать командами SQL, относятся: lo_creat
, lo_create
, lo_unlink
, lo_import
и lo_export
. Ниже приведены примеры их использования:
CREATE TABLE image ( name text, raster oid ); SELECT lo_creat(-1); -- возвращает OID нового пустого большого объекта SELECT lo_create(43213); -- пытается создать большой объект с OID 43213 SELECT lo_unlink(173454); -- удаляет большой объект с OID 173454 INSERT INTO image (name, raster) VALUES ('beautiful image', lo_import('/etc/motd')); INSERT INTO image (name, raster) -- то же, что выше, но с предопределённым OID VALUES ('beautiful image', lo_import('/etc/motd', 68583)); SELECT lo_export(image.raster, '/tmp/motd') FROM image WHERE name = 'beautiful image';
Серверные функции lo_import
и lo_export
значительно отличаются от их аналогов, выполняемых на стороне клиента. Эти две функции читают и пишут файлы в файловой системе сервера, с правами пользователя, владеющего базами данных. Поэтому использовать их разрешено только суперпользователям. Клиентские функции импорта и экспорта, напротив, читают и пишут файлы в файловой системе клиента, с правами клиентской программы. Для выполнения клиентских функций права суперпользователя не требуются.
Функциональность lo_read
и lo_write
также представляется через вызовы на стороне сервера, но имена серверных функций, в отличие от клиентских, не содержат символы подчёркивания. Эти функции нужно вызывать по именам loread
и lowrite
.