如何从postgresql数据库中获取图片

时间:2011-05-09 03:27:42

标签: c# image postgresql get npgsql

我想选择一个在postgresql数据库中保存为大对象的图片。

我知道我使用lo_export来做这件事。

但是有一个问题:我想将此图片直接保存到我的计算机上,因为我无法使用lo_export访问保存在服务器上的文件

(我认为如果通过选择查询将图片传输到我的电脑,那对我来说最好)

3 个答案:

答案 0 :(得分:2)

我并不完全了解C#的方法,但是Npgsql手册有一个类似于将bytea列写入文件的示例:

command = new NpgsqlCommand("select blob from t where id = 1);", conn);
Byte[] result = (Byte[])command.ExecuteScalar();

FileStream fs = new FileStream(args[0] + "database", FileMode.Create, FileAccess.Write);
BinaryWriter bw = new BinaryWriter(new BufferedStream(fs));

bw.Write(result);
bw.Flush();
fs.Close();
bw.Close();

所以你只需要从数据库中读取它就像任何其他列一样,并将其写入本地文件。这个例子大约是我链接到的页面的一半,只是搜索“bytea”,你就会找到它。

UPDATE :对于大型对象,该过程似乎相似但SQL-ish较少。手册(如上所述)包括一些大型对象示例:

NpgsqlTransaction t = Polacz.BeginTransaction();

LargeObjectManager lbm = new LargeObjectManager(Polacz);
LargeObject lo = lbm.Open(takeOID(idtowaru),LargeObjectManager.READWRITE); //take picture oid from metod takeOID

byte[] buf = new byte[lo.Size()];
buf = lo.Read(lo.Size());

MemoryStream ms = new MemoryStream();
ms.Write(buf,0,lo.Size());

// ...

Image zdjecie = Image.FromStream(ms);

在手册中搜索“大型物体”,您将找到它。

答案 1 :(得分:0)

不熟悉C#但是如果你有贡献/ dblink并且更好地访问单独的postgresql服务器,这可能会有效:

  1. 从错误的数据库服务器中选择大对象。
  2. 使用dblink将大对象复制到良好的数据库服务器中。
  3. lo_export on good db server。

答案 2 :(得分:0)

如果您的图片不超过1GB(或者您不能只访问部分字节),那么使用bytea是存储它们的最佳选择。

许多SQL GUI工具允许直接下载(甚至查看)bytea列的内容