PostgreSql Большие объекты и хранимые функции - PullRequest
0 голосов
/ 11 января 2012

Мое приложение получает изображения JPG в виде байтовых массивов от устройства, подключенного к системе. Они должны быть записаны в таблицу больших объектов базы данных PostgreSql 9.1. В настоящее время я использую C # и Devart docConnect для библиотеки PostgreSql для доступа к моей базе данных, и все работает нормально. Проблема в том, что запись моих данных в базу данных (мне нужно обновить 2 таблицы плюс запись байтов изображения в таблицу больших объектов) требует нескольких поездок в базу данных. Я хочу сократить количество поездок, которые мой код совершает в базу данных, чтобы ускорить процесс.

Я написал хранимую функцию, которая выполняет UPSERT для двух таблиц. Я хочу передать байты изображения в качестве параметра массива байтов в хранимую функцию и сделать так, чтобы хранимая функция записывала байты изображения в таблицу больших объектов. Это возможно? Документация по функциям на стороне сервера в руководстве к PostgreSql 9.1 скудна, и я не уверен, какую функцию вызывать для чтения и записи данных.

Спасибо

Tony

1 Ответ

1 голос
/ 12 января 2012

В отличие от Oracle или Microsoft, Postgres не делает различий между функциями и хранимыми процедурами ... он имеет только функции (см. В руководстве по функциям postgres ... также очень гибкий, вы можете вызывать библиотеки c или java и другие).приколы).Таким образом, вы создадите функцию (возможно, в PLPGSQL) для приема нескольких параметров, а затем вызовете функцию, используя оператор выбора в качестве функции (arguement1, arg2 и т. Д.).Вот пример, если вам нужен шаблон:

CREATE OR REPLACE FUNCTION deleteme
(deleteid integer)
RETURNS integer AS
$BODY$
BEGIN
delete from mytable_attrib where id = $1;
delete from mytable where id = $1;
return 0;
END;
$BODY$
LANGUAGE plpgsql VOLATILE;

Немного отличается по языку и синтаксису, чем вы могли бы привыкнуть ... не называйте переменную с тем же именем, что и имя столбца, например... или будьте готовы перейти к динамическому SQL, чтобы построить оператор в переменной, используя plpgsql, и выполнить переменную как sql.

Выполните ее как функцию, а не оракул синтаксиса exec или MS.Чтобы удалить строку идентификатора 8, теперь я могу использовать

select deleteme(8)

Дополнительные баллы за проверку орфографии яблока, изменение postgres на смазку после смазки

Я должен отметить, что мои знания относятся к 8.4, а не к 9.1

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