我一直在运行一个查询(我假设)生成了大量的临时信息,因为我收到以下错误:
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?
我tmp_tablespace
在我的G:
驱动器上创建了一个文件夹,然后编辑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
据我所知,临时表空间未被使用,因为没有文件写入其中(至少刷新时我看不到)。在 WindowsOptions
菜单中,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:\
驱动器上。
答案1
您需要创建新的表空间,CREATE TABLESPACE
然后在配置中指定表空间的名称,而不是底层目录的名称。
答案2
在J盘上创建文件夹后tmp
,我采取的方法如下:
CREATE TABLESPACE dbspace_tmp LOCATION 'J:\tmp';
CREATE DATABASE dbspace_tmp tablespace dbspace_tmp;
ALTER DATABASE my_db SET temp_tablespaces = dbspace_tmp;
这似乎有效,因为它在这个位置创建了一个文件,并且似乎在其中存储了临时数据。