postgresqlデータベースに大きなオブジェクトとして保存する画像を選択したいと思います。
私はこれを行うためにlo_exportを使用することを知っています。
しかし、問題があります。lo_exportを使用してサーバーに保存するファイルにアクセスできないため、この画像を自分のコンピューターに直接保存したいのです。
(選択クエリによってコンピュータに画像を転送する場合は、これが最適だと思います)
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っぽくはありません。マニュアル(上記にリンクされている)には、いくつかの大きなオブジェクトの例が含まれています。
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);
マニュアルで「ラージオブジェクト」を検索すると見つかります。
写真が1GBを超えない場合(またはバイトの一部のみにアクセスしない場合)は、を使用bytea
して保存することをお勧めします。
多くのSQLGUIツールを使用すると、bytea列のコンテンツを直接ダウンロード(表示することもできます)できます。
C#に精通していませんが、contrib / dblinkを使用していて、別のpostgresqlサーバーへのアクセスを改善している場合は、次のように機能する可能性があります。