PostgreSQL - 如何更改tmp目录?

时间:2013-09-11 00:40:09

标签: postgresql

我使用OpenGeo Suite在Windows 8上运行PostgreSQL。我在大型连接上的磁盘空间不足。如何更改存储“散列连接临时文件”的临时目录?

我正在查看PostgreSQL配置文件,但我没有看到tmp文件目录。

注意:我正在使用一个设置为主键的变量文本字段合并两个包含1000万行的表。

这是我的疑问:

UPDATE blocks 
SET "PctBlack1" = race_blocks."PctBlack1"
FROM race_blocks
WHERE race_blocks.esriid = blocks.geoid10

2 个答案:

答案 0 :(得分:4)

首先,确保这些列(两个表)都有索引。这将使PostgreSQL使用更少的临时文件。另外,将GUC work_mem设置为尽可能高,以使PostgreSQL为此类操作使用更多内存。

现在,如果仍然需要,要更改临时路径,首先需要创建一个表空间(如果你还没有这样做):

CREATE TABLESPACE temp_disk LOCATION 'F:\pgtemp';

然后,您必须设置GUC temp_tablespaces。您可以按照每个用户,postgresql.conf或当前会话内(在查询之前)为每个数据库设置它:

SET temp_tablespaces TO 'temp_disk';

UPDATE blocks 
SET "PctBlack1" = race_blocks."PctBlack1"
FROM race_blocks
WHERE race_blocks.esriid = blocks.geoid10

还有一件事,用户必须具有CREATE权限才能使用此功能:

GRANT CREATE ON TABLESPACE temp_disk TO app_user;

答案 1 :(得分:0)

由于缺少权限,我无法直接在PostgreSQL中设置F:/ pgtemp目录。

所以我使用windows命令行“mklink / D”(软链接)创建了一个符号链接。现在PostgreSQL将临时文件写入c:\ Users \ Administrator.opengeo \ pgdata \ Administrator \ base \ pgsql_tmp,它们存储在F:驱动器上。