关于使用postgresql temp_tablespace的build议

我一直在运行一个查询(我假设)生成大量的临时信息,因为我收到以下错误:

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一个文件,它似乎在那里存储临时数据。