关于使用 postgresql temp_tablespace 的建议

关于使用 postgresql temp_tablespace 的建议

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

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;

这似乎有效,因为它在这个位置创建了一个文件,并且似乎在其中存储了临时数据。

相关内容