×
Мы обрабатываем cookies, чтобы сделать наш сайт удобнее и персонализированнее для вас. Подробнее: политика использования «cookies» и «политики конфиденциальности».

Для самостоятельной настройки ознакомьтесь с инструкцией

Дополнительные настройки cookies в браузерах

Файлы cookie автоматически загружаются в ваш браузер при посещении веб-сайта. У вас есть возможность управлять этими файлами. Если Вы не согласны с использованием файлов cookies, запретите их сохранение на своём устройстве, удалите уже имеющиеся файлы cookies через настройки браузера или прекратите использование сайта.

При отключении обработки cookie наш сайт продолжит функционировать, однако будут использоваться исключительно необходимые технические файлы, без которых работа ресурса невозможна.

Инструкция по отключению cookies
Принять
Настроить
Отклонить

ДОКУМЕНТАЦИЯ

Выберите версию, форк и язык для СУБД Digital Q.DataBase, чтобы прочитать или скачать всю документацию.
Техподдержка
Документация
Диасофт
Авторские права © 2016–2025 ООО "Диасофт Экосистема"
Скачать всю документацию:

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

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

Таблица 4.2.1. Функции SQL для работы с большими объектами

Функция

Описание

Примеры

lo_from_bytea ( loid oid, data bytea ) → oid

Создает большой объект и сохраняет в нем data данные. Если параметр loid равен нулю, то система выберет свободный OID; в противном случае будет использован указанный OID (если большой объект с таким OID уже существует, возникнет ошибка). При успешном выполнении возвращается OID созданного большого объекта.

lo_from_bytea(0, '\xffffff00')24528

lo_put ( loid oid, offset bigint, data bytea ) → void

Записывает данные data начиная с заданного смещения внутри большого объекта; при необходимости размер большого объекта увеличивается.

lo_put(24528, 1, '\xaa')

lo_get ( loid oid [, offset bigint, длина integer ] ) → 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 функции значительно отличаются по своему поведению от клиентских аналогов. Эти две функции осуществляют чтение и запись файлов в файловой системе сервера, используя права доступа владельца базы данных. В связи с этим по умолчанию их использование ограничено и доступно только суперпользователям. В отличие от них, клиентские функции импорта и экспорта работают с файлами в файловой системе клиента, используя права доступа клиентского приложения. Клиентские функции не требуют никаких привилегий в базе данных, за исключением права на чтение или запись соответствующего большого объекта.

Внимание

Существует возможность GRANT использования серверных функций lo_import и lo_export пользователями без прав суперпользователя, однако это требует тщательного анализа последствий для безопасности. Злоумышленник, обладающий такими привилегиями, может легко использовать их для получения прав суперпользователя (например, путем перезаписи конфигурационных файлов сервера) или атаковать файловую систему сервера напрямую, не пытаясь получить статус суперпользователя базы данных в явном виде. Следовательно, доступ к ролям, обладающим такими привилегиями, должен контролироваться так же строго, как и доступ к ролям суперпользователя. Тем не менее, если использование серверных функций lo_import или lo_export необходимо для выполнения рутинных задач, безопаснее использовать роль с такими привилегиями, чем роль с полными правами суперпользователя, так как это помогает снизить риск ущерба от случайных ошибок.

Данный функционал lo_read и lo_write также доступен через серверные вызовы, однако имена функций на стороне сервера отличаются от имен в клиентских интерфейсах тем, что они не содержат знаков подчеркивания. Данные функции необходимо вызывать как loread и lowrite.

Наверх
свяжитесь
с нами
контакты
Для прямой связи с нами вы можете использовать контакты ниже, либо оставить заявку через форму обратной связи, и мы обязательно свяжемся с вами

*поля обязательные к заполнению