Postgresql 9.1 NPGSQL 2.0.12
postgresqlデータベースに保存したいバイナリデータがあります。ほとんどのファイルは正常にロードされますが、大きなバイナリ(664 Mb)ファイルが問題を引き起こしています。Npgsqlを介したラージオブジェクトサポートを使用してファイルをpostgresqlにロードしようとすると、postgresqlサーバーは「メモリ不足」エラーを返します。
私は現在、4Gb RAMを搭載したワークステーションでこれを実行しており、postgresqlがアイドル状態で実行されている状態で2Gbが解放されています。
これは私が使用しているコードであり、PGFoundryNpgsqlユーザーズマニュアルを基にしています。
using (var transaction = connection.BeginTransaction())
{
try
{
var manager = new NpgsqlTypes.LargeObjectManager(connection);
var noid = manager.Create(NpgsqlTypes.LargeObjectManager.READWRITE);
var lo = manager.Open(noid, NpgsqlTypes.LargeObjectManager.READWRITE);
lo.Write(BinaryData);
lo.Close();
transaction.Commit();
return noid;
}
catch
{
transaction.Rollback();
throw;
}
}
postgresqlのメモリ設定をデフォルトからあらゆる種類の値に変更してみました:
- shared_buffers
- work_mem
- Maintenance_work_mem
これまでのところ、postgresqlは優れたデータベースシステムであることがわかりましたが、これは現在のところショーストッパーであり、このサイズのファイルをデータベースに取り込むことができないようです。手動でファイルをチャンクに切り刻んで、クライアント側を再作成する必要はありません。
助けてください!?