sco*_*ott 3 postgresql oracle migration blob postgresql-9.4
我使用BLOB
Oracle 表中的数据类型来存储图像和文档文件。现在对于 Postgres(9.4.5),我有两个选择,即,BYTEA
或OID
.
考虑到从 Java 端传递参数(SAVING)如下:
DiskFileItemDeepy file = myFile;
InputStream is = null;
long fileSize = 0;
if (file != null && file.getFileSize() > 0){
is = file.getInputStream();
fileSize = file.getFileSize();
call.setBinaryStream(1, (InputStream)is, (long)fileSize);
}
...
call.execute();
//When retrieve the data use:
java.sql.Blob blob = (Blob) resultSet.getBlob(tableColumnName);
Run Code Online (Sandbox Code Playgroud)
出于上述目的,哪种 Postgres 数据类型更适合替换BLOB
,是BYTEA
还是OID
?
从概念的角度来看,相当于 Oracle 的BLOB
数据类型bytea
在 Postgres 中。
bytea
只允许您读取和写入完整数据(您不能仅从 1GB 值中检索 100KB)。这意味着它在读取时保存在 JVM 的内存中。这与 Oracle 的BLOB
类型相同。从 JDBC 的角度来看,这两种数据类型的行为几乎相同。
OID(或者更好:“大对象”)不是真正的“数据类型”。它只是一个指向存储在文件系统中的数据的指针。使用大对象的优点是可以正确地将内容从服务器流式传输到客户端,而无需将整个二进制数据加载到客户端的内存中。
然而,处理大对象比处理bytea
列复杂得多。如果您从基表中删除了相应的行,您还需要手动清理已删除的大对象(您不需要这样做bytea
)。大对象的读写也比处理bytea
值复杂得多。
由于您目前正在使用一BLOB
列,因此您显然在客户端有内存来处理数据,在这种情况下,为了使转换尽可能顺利,我强烈建议bytea
在 Postgres 中使用。
归档时间: |
|
查看次数: |
5536 次 |
最近记录: |