Документация по PostgreSQL 9.4.1 | |||
---|---|---|---|
Пред. | Уровень выше | Глава 32. Большие объекты | След. |
32.4. Серверные функции
Функции, предназначенные для работы с большими объектами на стороне сервера из SQL, перечислены в Таблице 32-1.
Таблица 32-1. SQL-ориентированные функции для работы с большими объектами
Функция | Тип результата | Описание | Пример | Результат |
---|---|---|---|---|
lo_from_bytea(loid oid, string bytea) | oid | Создаёт большой объект, сохраняет в нём данные и возвращает его OID. С 0 система выбирает OID сама. | lo_from_bytea(0, E'\\xffffff00') | 24528 |
lo_put(loid oid, offset bigint, str bytea) | void | Записывает данные по заданному смещению. | lo_put(24528, 1, E'\\xaa') | |
lo_get(loid oid [, from bigint, for int]) | 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
.
Пред. | Начало | След. |
Клиентские интерфейсы | Уровень выше | Пример программы |