我们有N个单独的进程可以同时踢,所有进程都与同一个postgres数据库进行通信。这些“进程”是jdbc代码,它删除用户/模式,然后重新创建用户/模式。我们通过连接作为跨所有进程使用的DBA用户来实现此目的。每个用户/架构都是唯一的,因此并不是所有进程都试图删除它们。有了这个,所以1个过程总是会成功,而其余的过程会失败:
错误:元组同时更新
我们正在使用以下代码:
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();
我可以轻易想象问题是什么,只是不知道如何绕过它(没有在进程之间进行一些同步,但这将是相当多的工作)。任何帮助都会很棒。