【发布时间】:2013-05-01 12:24:50
【问题描述】:
此请求使用 postgresql 引发语句超时。
DELETE FROM my_table where my_table.id IN (
SELECT DISTINCT b.id
FROM my_table a
LEFT JOIN my_table b
on b.rowA = a.rowA and b.rowB = true
WHERE a.rowB = false
)
由于某些原因,我无法在 postgresql 上增加我的超时时间。所以,我需要改进我的要求。如何改进它?也许不使用IN?该怎么做?
感谢您的帮助。
编辑更多信息:
我在一个 JAVA 批处理中,我收到的错误消息如下:
原因:org.postgresql.util.PSQLException: ERROR: canceling 由于语句超时而导致的语句 org.postgresql.core.v3.QueryExecutorImpl.receiveErrorResponse(QueryExecutorImpl.java:1525) 在 org.postgresql.core.v3.QueryExecutorImpl.processResults(QueryExecutorImpl.java:1309) 在 org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:188) 在 org.postgresql.jdbc2.AbstractJdbc2Statement.execute(AbstractJdbc2Statement.java:452) 在 org.postgresql.jdbc2.AbstractJdbc2Statement.executeWithFlags(AbstractJdbc2Statement.java:354) 在 org.postgresql.jdbc2.AbstractJdbc2Statement.executeUpdate(AbstractJdbc2Statement.java:308) 在 org.apache.commons.dbcp.DelegatingPreparedStatement.executeUpdate(DelegatingPreparedStatement.java:102)
【问题讨论】:
-
什么进程导致超时?你得到什么错误信息?你只想停止超时吗?如果您想让 DELETE 运行得更快,我们将需要更多信息。例如,关于表的一些信息,例如删除了多少行、需要多长时间、解释计划和实际查询。
-
@jonearles 请查看我的编辑了解更多详情。是的,我只想停止超时,当我的表中没有太多行时,请求有效。删除的数量或行数取决于表格内容(有时为数十万,有时为 0)。这个查询是真正的查询,我的表名不会给你更多信息。
-
我根据您的编辑重新标记了问题。您可能还想更新问题和标题。我认为您的问题与 PL/SQL 无关。
标签: java performance postgresql timeout plpgsql