Java 使用DBA在postgres上并行删除/创建失败,错误:tuple并发更新
我们有N个可以同时启动的独立进程,它们都与同一个postgres数据库通信。这些“进程”是jdbc代码,它删除一个用户/模式,然后重新创建用户/模式。我们通过作为DBA用户进行连接来实现这一点,DBA用户可以跨所有流程使用。每个用户/模式都是唯一的,因此并非所有进程都试图删除相同的用户/模式。因此,上述1个过程将始终成功,而其余过程将失败: 错误:元组同时更新 我们正在删除以下代码:Java 使用DBA在postgres上并行删除/创建失败,错误:tuple并发更新,java,jdbc,postgresql-9.1,Java,Jdbc,Postgresql 9.1,我们有N个可以同时启动的独立进程,它们都与同一个postgres数据库通信。这些“进程”是jdbc代码,它删除一个用户/模式,然后重新创建用户/模式。我们通过作为DBA用户进行连接来实现这一点,DBA用户可以跨所有流程使用。每个用户/模式都是唯一的,因此并非所有进程都试图删除相同的用户/模式。因此,上述1个过程将始终成功,而其余过程将失败: 错误:元组同时更新 我们正在删除以下代码: String postgresRevokeUser = "REVOKE AL
String postgresRevokeUser = "REVOKE ALL ON DATABASE " + postgresDB + " FROM " + this.getUsername();
String postgresDropSchema = "DROP SCHEMA IF EXISTS " + this.getSchema() + " CASCADE";
String postgresDropUser = "DROP USER IF EXISTS " + this.getUsername();
connection = getDbaConnection();
connection.setAutoCommit(false);
statement = connection.createStatement();
statement.addBatch(postgresRevokeUser);
statement.addBatch(postgresDropSchema);
statement.addBatch(postgresDropUser);
statement.executeBatch();
connection.commit();
我可以很容易地想象问题是什么,只是不知道如何绕过它(不在流程之间进行一些同步,但这将是相当多的工作)。任何帮助都会很好。看起来像是PostgreSQL错误。请在9.4beta2上进行测试,并确认其仍然存在。