我收到错误
错误:无法写入临时文件的块3478284:设备上没有剩余空间
在运行以下查询时:
INSERT INTO summary SELECT t1.a, t1.b, SUM(t1.p) AS p, COUNT(t1.*) AS c, t1.d, t1.r, DATE_TRUNC('month', t1.start) AS month, t2.t AS t, t2.h, t2.x FROM raw1 t1, raw2 t2 WHERE t1.t2_id=t2.id AND (t2.t<>'a' OR t2.y) GROUP BY month, t, a, b, d, r, h, x
表t1非常大,表t2非常大
Caused by: org.postgresql.util.PSQLException: ERROR: could not write block 3478284 of temporary file: No space left on device at org.postgresql.core.v3.QueryExecutorImpl.receiveErrorResponse(QueryExecutorImpl.java:1592) at org.postgresql.core.v3.QueryExecutorImpl.processResults(QueryExecutorImpl.java:1327) at org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:192) at org.postgresql.jdbc2.AbstractJdbc2Statement.execute(AbstractJdbc2Statement.java:451) at org.postgresql.jdbc2.AbstractJdbc2Statement.executeWithFlags(AbstractJdbc2Statement.java:350) at org.postgresql.jdbc2.AbstractJdbc2Statement.executeUpdate(AbstractJdbc2Statement.java:304)
任何提示赞赏。
Postgres在试图完成请求时临时卸载空间不足 – 解决这个问题的方法是运行一个更简单的查询(这可能是无用的),或者释放驱动器上的更多空间PGDATA/base/pgsql_tmp/ (如果你还没有做过VACUUM FULL ,现在可能是个好时机:-)
你也可以put pgsql_tmp放在自己的分区上(因为Postgres往往会对这些东西感到厌烦)
请注意,我相信现在
pgsql_tmp是per-tablespace,所以如果这不是主要(base)表空间replace适当:-)
在正在写入的磁盘上添加空间?
我敢打赌,postgres正在使用/ tmp进行临时存储,并且根分区比系统中的分区小。 如果将postgres临时存储更改为有更多空间的地方,则可以修复此问题。 或者如上面的post说增加更多的空间。 要确认这是写在configuration文件中的/ tmp中查看,或者在运行查询时反复运行ls -lart / tmp,并且如果文件正在增长,那么它就是写入的地方。 我不是一个postgres用户,但大部分你应该能够弄清楚我上面所说的。