Java 使用DBA在postgres上并行删除/创建失败,错误:tuple并发更新

Java 使用DBA在postgres上并行删除/创建失败,错误:tuple并发更新,java,jdbc,postgresql-9.1,Java,Jdbc,Postgresql 9.1,我们有N个可以同时启动的独立进程,它们都与同一个postgres数据库通信。这些“进程”是jdbc代码,它删除一个用户/模式,然后重新创建用户/模式。我们通过作为DBA用户进行连接来实现这一点,DBA用户可以跨所有流程使用。每个用户/模式都是唯一的,因此并非所有进程都试图删除相同的用户/模式。因此,上述1个过程将始终成功,而其余过程将失败: 错误:元组同时更新 我们正在删除以下代码: String postgresRevokeUser = "REVOKE AL

我们有N个可以同时启动的独立进程,它们都与同一个postgres数据库通信。这些“进程”是jdbc代码,它删除一个用户/模式,然后重新创建用户/模式。我们通过作为DBA用户进行连接来实现这一点,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();

我可以很容易地想象问题是什么,只是不知道如何绕过它(不在流程之间进行一些同步,但这将是相当多的工作)。任何帮助都会很好。

看起来像是PostgreSQL错误。请在9.4beta2上进行测试,并确认其仍然存在。