отправка как base64 и сохранение в байтовый oid - PullRequest
0 голосов
/ 09 октября 2018

Я пытаюсь написать скрипт для сохранения некоторых файлов в таблицу с OID (byte []). Я нахожу lo_import, но это не совсем то, что я хочу.Я хотел бы установить base64 вместо пути к файлу.Есть ли другой метод?Если Ты не понимаешь ->

что я не хочу

INSERT INTO table VALUES (lo_import('path'))

что я хочу

INSERT INTO table VALUES (lo_import('base64 (maybe something else)'))

1 Ответ

0 голосов
/ 09 октября 2018

Вы можете написать функцию (это решение только на стороне сервера)

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, может быть удален.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...