(Postgre)SQL更新查询不返回

(Postgre)SQL更新查询不返回,sql,postgresql,Sql,Postgresql,我有一个简单的更新查询(在两个大表上),它永远不会完成 UPDATE transit_edge te1 SET dates_to_add = ( SELECT ARRAY_AGG(date) FROM transit_edge te2 LEFT OUTER JOIN calendar_dates cd2 ON (te2.service_id = cd2.service_id AND cd2.exception_type = 1) WHERE te2.transit_edge_

我有一个简单的更新查询(在两个大表上),它永远不会完成

UPDATE transit_edge te1 SET dates_to_add =
(   SELECT ARRAY_AGG(date)
    FROM transit_edge te2 LEFT OUTER JOIN calendar_dates cd2 ON (te2.service_id = cd2.service_id AND cd2.exception_type = 1)
    WHERE te2.transit_edge_id = te1.transit_edge_id
);
如果我只使用给定的id运行内部查询,我会得到正确的结果

SELECT ARRAY_AGG(date) 
FROM transit_edge te2 LEFT OUTER JOIN calendar_dates cd2 ON (te2.service_id = cd2.service_id AND cd2.exception_type = 1) 
WHERE te2.transit_edge_id = te1.transit_edge_id AND te1.transit_edge_id = 282956
表计数相当高:

select count(*) from transit_edge;
count
---------
9187885

select count(*) from calendar_dates;
count
----------
10025969
我还更新了postgresql.conf以实现更大的内存使用

#------------------------------------------------------------------------------
# RESOURCE USAGE (except WAL)
#------------------------------------------------------------------------------

# - Memory -

shared_buffers = 2GB   
work_mem = 200MB   
checkpoint_segments = 3
max_connections = 100 
maintenance_work_mem = 64MB
我运行了限制为100的内部查询,得到了以下错误消息

ERROR:  invalid memory alloc request size 1073741824
非常感谢您的帮助!
丹尼尔

尝试使用以下方法:

UPDATE transit_edge te1 SET dates_to_add =
(   SELECT ARRAY_AGG(date)
    FROM calendar_dates cd2
    WHERE te1.service_id = cd2.service_id AND cd2.exception_type = 1
);

有没有办法看看是否真的发生了什么,或者我必须等到完整的查询完成?DanielGerber您可以将外部(
更新
)查询限制为id的一小部分(
,其中te1.transit_edge_id in(1,2,3等)
)来检查结果。如果结果正常-继续执行完整查询。@CraigRinger如果查询做了一些愚蠢的事情(例如由于缺少联接条件而导致笛卡尔积),则可能没有帮助。此查询似乎会返回结果。但是对于左外部联接,这真的是同一个查询吗?
EXPLAIN
对于从未完成的查询的输出?尝试了这个,但是我也没有得到EXPLAIN的输出。
EXPLAIN
没有输出?没有
分析
?这表明它正陷入计划之中,而这不应该发生。精确的PostgreSQL版本来自
SELECT version()
?x86_64-unknown-linux-gnu上的PostgreSQL 9.3.5,由gcc(Debian 4.7.2-5)4.7.2编译,64位。。。一个简单的
解释更新…
无限期挂起?是否有任何与pg_锁相关的内容?postgres后端(在运行
解释更新之前通过运行
选择pg\u backend\u pid()
来识别…
)是否使用100%的CPU?