PostgreSql大对象和存储函数

时间:2012-01-11 14:41:04

标签: c# postgresql stored-procedures

我的应用程序从连接到系统的设备接收JPG图像作为字节数组。这些需要写入PostgreSql 9.1数据库的Large Objects表。我目前正在使用C#和Devart docConnect for PostgreSql库来访问我的数据库,一切正常。问题是将数据写入数据库(我需要更新2个表并将图像字节写入大对象表)需要多次访问数据库。我希望减少代码对数据库的访问次数,以加快速度。

我写了一个存储函数,它在两个表上执行UPSERT。我想将图像字节作为字节数组参数传递给存储的函数,并使存储的函数将图像字节写入大对象表。这可能吗? PostgreSql 9.1手册中关于服务器端功能的文档很少见,我不确定要读取什么功能才能阅读&写数据。

由于

1 个答案:

答案 0 :(得分:1)

与Oracle或Microsoft不同,Postgres不区分函数和存储过程......它只有函数(在postgres手册中查找函数......也非常灵活,你可以调用c或java库等有趣的东西)。因此,您将创建一个函数(可能在PLPGSQL中)接受一些参数,然后使用select语句作为函数调用该函数(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执行。

像函数一样执行它,而不是oracle或MS想要的exec语法。要删除ID第8行,我现在可以使用

select deleteme(8)

苹果拼写检查的额外点数更改postgres发布润滑脂

我应该标记我的知识是针对8.4而不是9.1