繁体   English   中英

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

[英]how to get a picture from a postgresql database

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

我知道我使用lo_export来做到这一点。

但有一个问题:我想将这张图片直接保存到我的电脑,因为我无法使用lo_export访问保存在服务器上的文件

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

我并不完全了解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”,你会发现它。

更新 :对于大型对象,该过程似乎相似但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);

在手册中搜索“大对象”,你会发现它。

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

  1. 从坏数据库服务器中选择大对象。
  2. 使用dblink将大对象复制到良好的数据库服务器中。
  3. lo_export在良好的数据库服务器上。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM