【问题标题】:Setting work_mem in Postgres for specific queries在 Postgres 中为特定查询设置 work_mem
【发布时间】:2014-01-26 18:13:27
【问题描述】:

我正在使用一个为PostgreSQL 委托给JDBC 驱动程序的库,并且一些查询非常复杂并且需要更多内存。对于所有查询,我不想将work_mem 设置为较大的值,只是这个子集。问题是执行以下代码会报错:

// pseudo-code for what is happening
String sql = "set work_mem = 102400;";
sql += "SELECT * FROM expensive_query";

ResultSet rs = DatabaseDriver.execute(sql);

当我运行它时,我得到一个错误:

set work_mem = 102400;

不返回任何结果。

这适用于pgAdmin,因为您可以一次执行多个查询。有没有更好的方法来做到这一点,还是我需要执行任意 SQL,然后提取我想要的结果集?

【问题讨论】:

    标签: java sql postgresql memory-management


    【解决方案1】:

    我不知道DatabaseDriver 是做什么的,但是使用“普通”JDBC 你只需要执行以下操作:

    Statment stmt = connection.createStatement();
    stmt.execute("set work_mem = 102400");
    ResultSet rs = stmt.executeQuery("select ...");
    

    【讨论】:

    • ... 和RESET work_mem; 之后。我还首先推荐SET LOCAL work_mem,这样如果你忘记RESET,它最多仍然是事务范围的。
    【解决方案2】:

    尝试使用 Batch Processing 来做到这一点

    【讨论】:

      猜你喜欢
      • 2023-03-29
      • 1970-01-01
      • 2021-12-27
      • 2020-07-30
      • 1970-01-01
      • 2022-10-05
      • 1970-01-01
      • 2018-07-08
      • 1970-01-01
      相关资源
      最近更新 更多