为什么postgresql会提示错误';可能磁盘空间不足';当有足够的磁盘空间时?

为什么postgresql会提示错误';可能磁盘空间不足';当有足够的磁盘空间时?,postgresql,temporary-files,diskspace,Postgresql,Temporary Files,Diskspace,我在ubuntu 12.0.4上的postgresql中运行此查询: SELECT t2.p AS prop, t2.o AS obj, COUNT(t2.o) AS num FROM "class_Event" AS t1, ((SELECT s,p,o FROM "prop_sliceHasAnomaly") UNION (SELECT s,p,o FROM "prop_eventHasDuration") UNION (SELECT s,p,o FROM "pr

我在ubuntu 12.0.4上的postgresql中运行此查询:

SELECT t2.p AS prop, t2.o AS obj, COUNT(t2.o) AS num 
FROM "class_Event" AS t1, 
  ((SELECT s,p,o FROM "prop_sliceHasAnomaly")  
   UNION (SELECT s,p,o FROM "prop_eventHasDuration")  
   UNION (SELECT s,p,o FROM "prop_sliceHasEndEvent")  
   UNION (SELECT s,p,o FROM "prop_eventPrecedeInCPU")  
   UNION (SELECT s,p,o FROM "prop_eventFollowInTask")  
   UNION (SELECT s,p,o FROM "prop_topObjectProperty")  
   UNION (SELECT s,p,o FROM "prop_eventDetails")  
   UNION (SELECT s,p,o FROM "prop_switchTo")  
   UNION (SELECT s,p,o FROM "prop_eventIsExecutedOn")  
   UNION (SELECT s,p,o FROM "prop_runningAction")  
   UNION (SELECT s,p,o FROM "prop_anomalyHasSlice")  
   UNION (SELECT s,p,o FROM "prop_eventPrecedeInTrace")  
   UNION (SELECT s,p,o FROM "prop_sliceHasStartEvent")  
   UNION (SELECT s,p,o FROM "prop_eventHasActiveDuration")  
   UNION (SELECT s,p,o FROM "prop_eventFollowInTrace")  
   UNION (SELECT s,p,o FROM "prop_runningTask")  
   UNION (SELECT s,p,o FROM "prop_eventOrdering")  
   UNION (SELECT s,p,o FROM "prop_domain")  
   UNION (SELECT s,p,o FROM "prop_sliceHasFunctionality")  
   UNION (SELECT s,p,o FROM "prop_traceContainsEvent")  
   UNION (SELECT s,p,o FROM "prop_eventHasDurationFromPreviousOccurrence")  
   UNION (SELECT s,p,o FROM "prop_eventPrecedeOccurrence")  
   UNION (SELECT s,p,o FROM "prop_eventPrecedeinTask")  
   UNION (SELECT s,p,o FROM "prop_switchFrom")  
   UNION (SELECT s,p,o FROM "prop_eventEndAt")  
   UNION (SELECT s,p,o FROM "prop_subPropertyOf")  
   UNION (SELECT s,p,o FROM "prop_eventFollowOccurrence")  
   UNION (SELECT s,p,o FROM "prop_eventFollowInCPU")  
   UNION (SELECT s,p,o FROM "prop_subClassOf")  
   UNION (SELECT s,p,o FROM "prop_eventHasDurationToNextOccurrence")  
   UNION (SELECT s,p,o FROM "prop_requestComponent")  
   UNION (SELECT s,p,o FROM "prop_eventStartAt")  
   UNION (SELECT s,p,o FROM "prop_range")  
   UNION (SELECT s,p,o FROM "prop_functionalityHasSlice") ) AS t2 
WHERE t1.s = t2.s 
GROUP BY t2.p, t2.o 
HAVING (COUNT(t2.o) > 1) 
但是我从posgresql中发现了这个错误:

ERROR:  could not write block 713 of temporary file: Aucun espace disponible sur le périphérique
HINT:  Perhaps out of disk space?

********** Erreur **********

ERROR: could not write block 713 of temporary file: Aucun espace disponible sur le périphérique
État SQL :53100
Astuce : Perhaps out of disk space?
我已经用命令
df-h

df -h
df: «/var/lib/lightdm/.gvfs»: Permission non accordée
Sys. de fichiers Taille Utilisé Dispo Uti% Monté sur
/dev/sda5           37G     35G   46M 100% /
udev                16G    4,0K   16G   1% /dev
tmpfs              6,3G    984K  6,3G   1% /run
none               5,0M       0  5,0M   0% /run/lock
none                16G    216K   16G   1% /run/shm
/dev/sda6           37G    411M   35G   2% /opt
/dev/sda9          499G    435G   40G  92% /home
/dev/sda7           37G    4,7G   30G  14% /usr
/dev/sda8           37G    5,1G   30G  15% /usr/local
而且
/home
上似乎有40GB可用空间磁盘。所以我想知道是什么导致了这个错误?是否有可以在postgresql配置中设置的磁盘空间限制参数


有人对此有想法吗?

这是在写一个临时文件。他们写信给,为此:

默认值为空字符串,这将导致在当前数据库的默认表空间中创建所有临时对象

这意味着它将把临时文件写入您的
data\u目录
。要查看其位置,请运行
showdata\u目录
。我希望您会得到类似于
/var/lib/pgsql/9.3/data/
的结果,表明PostgreSQL的数据位于
/var

(请务必检查此项;如果临时表空间位于tempfs上,那么它基本上是一个ramdisk,您应该将其移到其他位置,因为这不仅对性能有害,而且对大临时文件也是一个问题。)

在您的系统上,
/var
是文件系统的一部分,该文件系统已满。因此,包含PostgreSQL数据的分区已满,并且PostgreSQL正确地将此报告为错误

可用空间的选项包括:

  • 确保删除
    /tmp
    中的旧临时文件

  • /var/log

  • 删除旧的PostgreSQL日志。它们的位置根据操作系统/发行版而有所不同,您没有提到这一点;它们通常位于
    /var/log/postgresql/
    /var/lib/pgsql/9.3/data/pgu log
    重要:请勿删除PostgreSQL数据目录中的任何其他内容;特别是,
    pg_xlog
    pg_clog
    是数据库系统的重要组成部分,不得以任何方式删除、移动或更改

  • 删除或截断PostgreSQL中的表(永久销毁数据)

  • DROP
    ping PostgreSQL中不需要的索引

  • 卸载程序

但最好的选择是:

  • 拿一个更大的磁盘

除非你知道你的tempdir在/home中,否则你的/partition是100%满的,而/tmp就在那里…@Charles Pg在默认情况下不会对tempfiles使用
/tmp
,部分原因是当操作系统在使用tempfiles时将它们从它下面删除时,它会感到非常不安。它使用
temp_表空间
,在大多数系统上,默认情况下,它位于
/var
中的主PostgreSQL数据目录中。我运行的是
lunixubuntu2.0.4
,这个错误是在查询执行之后还是之前发生的。因为实际上我无权清理
/var
中的空间,我对查询性能感兴趣。因此,我可以考虑代码< > PGADMI3实际返回的时间作为查询的执行时间,即使我还没有得到结果吗?当你在磁盘空间不足时,不要浪费时间去查看性能。您需要可用的磁盘空间才能获得良好的性能。非常完整的文件系统性能很差。不,你不能把PgAdmin报告的时间当作查询执行时间,只是时间到错误。您不知道查询执行完成了多远。说真的,找一个更大的磁盘,或者以其他方式修复存储问题。除非你解决了这个问题,否则你不能做任何有用的事情。