我想选择一个在postgresql数据库中保存为大对象的图片。
我知道我使用lo_export来做这件事。
但是有一个问题:我想将此图片直接保存到我的计算机上,因为我无法使用lo_export访问保存在服务器上的文件
(我认为如果通过选择查询将图片传输到我的电脑,那对我来说最好)
答案 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服务器,这可能会有效:
答案 2 :(得分:0)
如果您的图片不超过1GB(或者您不能只访问部分字节),那么使用bytea
是存储它们的最佳选择。
许多SQL GUI工具允许直接下载(甚至查看)bytea列的内容