首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JDBC postgres vacuum超时

JDBC postgres vacuum超时
EN

Stack Overflow用户
提问于 2009-08-15 06:44:31
回答 3查看 3.6K关注 0票数 1

我正在尝试通过在Java中运行以下SQL指令来清理Postgres数据库:

真空冗余分析

有时它似乎就是“挂起”,有没有什么干净的方法可以中止这个过程?我试过了

将statement_timeout设置为XXXX

但是我得到了错误信息"VACCUM不能在事务块内运行“

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2009-08-17 12:39:08

我刚刚测试过,"vacuum“支持"statement_timeout”。示例程序:

代码语言:javascript
复制
import java.sql.*;

class test
{
        public static void main(String[] args) {
                try {
                        Class.forName("org.postgresql.Driver");
                        Connection connection =
                                DriverManager.getConnection(
                                        "jdbc:postgresql://hostname/dbname",
                                        "username",
                                        "password"
                                );
                        connection.createStatement().executeUpdate(
                                "set statement_timeout to 500"
                        );
                        connection.createStatement().executeUpdate(
                                "vacuum analyze"
                        ); 
                } catch (Exception ex) {
                        ex.printStackTrace();
                }
        }
}

我得到以下错误:

代码语言:javascript
复制
org.postgresql.util.PSQLException: ERROR: canceling statement due to statement timeout
    at org.postgresql.core.v3.QueryExecutorImpl.receiveErrorResponse(QueryExecutorImpl.java:2062)
    at org.postgresql.core.v3.QueryExecutorImpl.processResults(QueryExecutorImpl.java:1795)
    at org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:257)
    at org.postgresql.jdbc2.AbstractJdbc2Statement.execute(AbstractJdbc2Statement.java:479)
    at org.postgresql.jdbc2.AbstractJdbc2Statement.executeWithFlags(AbstractJdbc2Statement.java:353)
    at org.postgresql.jdbc2.AbstractJdbc2Statement.executeUpdate(AbstractJdbc2Statement.java:299)
    at test.main(test.java:14)

也许你必须(临时)在你的连接上启用自动提交。

票数 3
EN

Stack Overflow用户

发布于 2012-10-31 20:24:34

如果postgres服务器花了太多时间来加载数据,也就是说,如果对于一个特定的查询,他们的结果太多,加载它将需要时间,并将抛出此异常。

票数 1
EN

Stack Overflow用户

发布于 2009-08-15 08:42:32

我认为除了重新启动数据库之外,没有什么好的(也就是安全的)方法来杀死进程。我也不知道有什么事务超时选项。

最好的解决方案是找出导致挂起的原因并修复该问题。vacuum很可能正在等待事务锁释放。使用pg_locks视图查看是否存在这种情况。如果您可以看到哪些资源被锁定,您就可以开始解决这个问题了。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1281333

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档