Java 更新字符串长度超过10M的XML字段时,XML文档无效
我试图用一个大字符串更新PostgreSQL表中的xml类型字段。如果数据长度>10M个字符,我将从服务器返回一个错误。我们使用UPDATE而不是INSERT,因为我们很难只插入xml字段,所以我们移植了所有其他记录/字段,将xml保留到最后 以前有人见过这个吗?也许你知道一个遥远的地方?服务器配置是否错误 我们正在使用最新的JDBC驱动程序9.3-1102和服务器9.3.4 64位 这是我们正在使用的代码:Java 更新字符串长度超过10M的XML字段时,XML文档无效,java,xml,postgresql,jdbc,Java,Xml,Postgresql,Jdbc,我试图用一个大字符串更新PostgreSQL表中的xml类型字段。如果数据长度>10M个字符,我将从服务器返回一个错误。我们使用UPDATE而不是INSERT,因为我们很难只插入xml字段,所以我们移植了所有其他记录/字段,将xml保留到最后 以前有人见过这个吗?也许你知道一个遥远的地方?服务器配置是否错误 我们正在使用最新的JDBC驱动程序9.3-1102和服务器9.3.4 64位 这是我们正在使用的代码: org.postgresql.Driver.setLogLevel(org.p
org.postgresql.Driver.setLogLevel(org.postgresql.Driver.DEBUG);
Connection connDB = SampleApp.getPostgresConnection(connInfo);
FileInputStream fis = new FileInputStream(fileEntry);
Scanner reader = new Scanner(fis);
reader.useDelimiter("%&#");
try {
connDB.setAutoCommit(false);
while (reader.hasNext()) {
String id = reader.next();
id = id.replaceAll("\n", "");
String line = reader.next();
line = line.replaceAll("\'", "\'\'");
String updateQuery = "UPDATE OMF SET XML_FILE = XMLPARSE ( DOCUMENT \'" + line + "\' ) WHERE ID = " + id;
try {
System.out.println("length: " +line.length() +" queryLen=" +updateQuery.length());
PreparedStatement preStatement = conDB.prepareStatement(updateQuery);
preStatement.execute();
preStatement.clearParameters();
preStatement.close();
connDB.commit();
}
catch (SQLException e) {
System.out.println("Error updating id#" +id);
e.printStackTrace();
}
}
} catch (NoSuchElementException e) {
// this just means EOF
} catch (SQLException e) {
e.printStackTrace();
}
}
catch (FileNotFoundException e) {
System.out.println("FileNotFoundException with file " +fileEntry.getPath().toString());
e.printStackTrace();
}
这是错误消息:
10:42:26.805 1您可以发送一个示例作为psql脚本吗?它看起来像PostgreSQL或libxml2 bug。10MB是个奇怪的数字,可能和工作记忆有关,虽然我不这么认为。你可以试着增加工作量。请发送一个简化的测试用例作为psql脚本。例如,您可以尝试重新检查长字符串md5的有效性。是可能的,所以长字符串在其他地方被破坏,而这个bug只是第一个可见的影响。。。。10MB的文本…“其中ID=123456;”这会引发上面显示的相同错误。我成功地测试了以120MB存储xml。我在libxml2中发现了10MB的内部限制。。此问题可能取决于您的XML。你能增加记录消息的详细程度吗?它可以显示来自PostgreSQL源代码的错误源-log\u error\u verbosity极好的信息!听起来我可能想把10MB的限制作为一种安全特性,并找到另一种解决问题的方法。也许我可以将数据加载到XML文档中,然后使用XPath将其加载到数据库中。这是缓慢的,但可能更多的未来证明。谢谢你,帕维尔。