我正在将大量文件(二进制数据)加载到 Postgres 数据库中(文件作为 blob 存储在数据库中)。
我发现的一种方法是使用大对象,效果很好。但是,出于各种原因,我想探索将文件内容直接存储在 bytea 字段中的可能性。现在,大对象管理器允许我直接将字节块直接写入其缓冲区,无需先将整个文件加载到内存中。
这对我来说相当重要,因为我加载文件时有多个并行工作的线程(如果所有线程同时将整个文件加载到内存中,GC 就无法跟上)。
有什么办法可以用 bytea 参数做到这一点?我在考虑一个 SQL 函数,它将一大块字节附加到一行的 bytea 字段。然后我可以重复调用这个函数来获取一个 blob。我对 PostgreSQL 很陌生,所以我真的可以提示这样一个 SQL 函数的外观。
那么,如何在 PostgreSQL 中附加到一个 bytea blob?
顺便说一句,替代想法也受到赞赏。
我正在使用 PostgreSQL 9.3、C# (.NET 4) 和 NpgSql Postgres 数据提供程序,文件 (blob) 可以是从几 kb 到几 mb 的所有内容。
编辑:我看到了对byteacat
函数的引用,看起来很有希望,但我找不到如何使用它的示例。
编辑2:最后,在查询中将blob作为单个参数加载似乎是最简单的......只要确保它们足够快地被垃圾收集(例如,不使字节数组成为一个属性目的)。Postgresql 很好地处理数据!