31.4. Серверные функции

Функции, предназначенные для работы с большими объектами на стороне сервера из SQL, перечислены в Таблице 31.1.

Таблица 31.1. SQL-ориентированные функции для работы с большими объектами

ФункцияТип результатаОписаниеПримерРезультат
lo_from_bytea(loidoid, stringbytea)oidСоздаёт большой объект, сохраняет в нём данные и возвращает его OID. С 0 система выбирает OID сама.lo_from_bytea(0, '\xffffff00')24528
lo_put(loidoid, offsetbigint, strbytea)voidЗаписывает данные по заданному смещению.lo_put(24528, 1, '\xaa') 
lo_get(loidoid [, frombigint, forint])byteaИзвлекает содержимое подстроки.lo_get(24528, 0, 3)\xffaaff

Каждой из клиентских функций, описанных ранее, соответствуют дополнительные функции на стороне сервера; на самом деле, по большей части клиентские функции представляют собой просто интерфейсы к равнозначным серверным функциям. К функциям, которые так же удобно вызывать командами 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.

close