Вы можете написать функцию (это решение только на стороне сервера)
CREATE OR REPLACE FUNCTION lo_import_bytea(path text)
RETURNS bytea AS $$
DECLARE
loid oid;
result bytea;
BEGIN
loid := lo_import(path);
result := lo_get(loid);
PERFORM lo_unlink(loid);
RETURN result;
END;
$$ LANGUAGE plpgsql;
Внимание - только суперпользователь может использовать функцию lo_import
, поскольку эта функция имеет доступ к файловой системе на стороне сервера.Так что, вероятно, эта функция должна иметь тип SECURITY DEFINER
.В этом случае эта функция может быть дырой в безопасности, и, возможно, неплохой идеей будет белый список пути.
Обычным способом является использование функции libpq (клиентской библиотеки) lo_import
который возвращает oid импортируемого объекта.Этот oid может использоваться как параметр для функции lo_get
.Эта функция преобразует объект LO в тип bytea.Преобразованное значение может быть вставлено в таблицу.После этого объект LO, описанный oid, может быть удален.