在Postgres中为特定查询设置work_mem

5

我正在使用一个委托给 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然后提取我想要的结果集?

2个回答

8

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

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

8
之后执行RESET work_mem;。我还建议在一开始使用SET LOCAL work_mem,这样如果你忘记了执行RESET,它最多只在事务范围内生效。 - Craig Ringer

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接