C# PostgreSql大型对象和存储函数

C# PostgreSql大型对象和存储函数,c#,postgresql,stored-procedures,C#,Postgresql,Stored Procedures,我的应用程序从连接到系统的设备接收作为字节数组的JPG图像。这些需要写入PostgreSql 9.1数据库的大对象表。我目前正在使用C和Devart docConnect for PostgreSql库访问我的数据库,一切正常。问题是,将数据写入数据库需要更新2个表,并将图像字节写入大对象表,这需要多次访问数据库。我想减少代码到数据库的次数,以加快速度 我编写了一个存储函数,它在两个表上执行UPSERT。我想将图像字节作为字节数组参数传递给存储函数,并让存储函数将图像字节写入大对象表。这可能吗?

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

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

谢谢


Tony

与Oracle或Microsoft不同,Postgres不区分函数和存储过程……它只有函数在Postgres手册中查找有关函数的信息……非常灵活,您可以调用c或java库以及其他有趣的东西。因此,您可能会在PLPGSQL中创建一个函数来接受一些参数,然后使用select语句调用该函数,如functionrguement1、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更改为post润滑脂的额外点数


我应该表明我的知识是针对8.4而不是9.1的

使用bytea会不会让事情变得更简单?请看我对第十二题答案的评论。我仍然不明白。如果您已经有了bytea,那么为什么需要大对象呢?之所以使用大对象表,是因为这是一项要求。除此之外,我真的无法深入了解。这也是我不能改变的要求,我知道。我很抱歉没有具体说明,但我的问题与Postgres中内置的大型对象函数有关,这些函数以louè开头。我想向函数传递一个bytea参数;我不确定调用什么lou函数来将bytea写入大型对象表,因为我所知道的函数以文件名作为参数。我不想将数据写入文件系统只是为了将其放入大对象表中。哦,对不起……我有点偏离了您的意图。实际上,我已经避免在我创建的任何数据库中使用大型对象,所以我在这里没有任何直接的经验…对不起。我想您已经安装了contrib文件。这是我能给你看的最好的