我一直在运行一个查询(我假设)生成大量的临时信息,因为我收到以下错误:
ERROR: could not write block 16451641 of temporary file: No space left on device HINT: Perhaps out of disk space? ********** Error ********** ERROR: could not write block 16451641 of temporary file: No space left on device SQL state: 53100 Hint: Perhaps out of disk space?
我在我的G:驱动器上创build了一个文件夹tmp_tablespace ,然后编辑了postgresql.conf并重新启动了数据库。
#------------------------------------------------------------------------------ # CLIENT CONNECTION DEFAULTS #------------------------------------------------------------------------------ # - Statement Behavior - #search_path = '"$user",public' # schema names #default_tablespace = '' # a tablespace name, '' uses the default temp_tablespaces = 'G:/tmp_tablespace/' # a list of tablespace names, '' uses
据我所知,临时表空间没有被使用,因为没有文件被写在那里(至less我没有看到刷新时)。 在“Windows Options菜单中,选中“ Show Hidden Files ,在处理运行时刷新了文件夹几次,并检查保持为0的文件夹大小。
在我的SQL代码中,我也尝试使用SET temp_tablespaces('G:\tmp_tablespace'); 和temp_tablespaces('G:\tmp_tablespace'); 但是两行都返回了错误消息。
我使用PostGreSQL 9.1 32位和Windows 7.是否有其他设置,我应该检查? 我的PostGreSQL安装位于C:\驱动器上,关联的表空间位于G:\驱动器上。
您需要使用CREATE TABLESPACE创build新的表空间,然后在您的configuration中指定表空间的名称,而不是基础目录的名称。
在驱动器J上创build文件夹tmp之后,我采取的方法如下所示:
CREATE TABLESPACE dbspace_tmp LOCATION 'J:\tmp'; CREATE DATABASE dbspace_tmp tablespace dbspace_tmp; ALTER DATABASE my_db SET temp_tablespaces = dbspace_tmp;
这似乎是工作,因为它在这个位置创build一个文件,它似乎在那里存储临时数据。