使用DBA在postgres上进行并行删除/创建失败:ERROR:tuple并发更新

时间:2014-09-25 14:40:38

标签: java jdbc postgresql-9.1

我们有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();

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

0 个答案:

没有答案