我使用OpenGeo Suite在Windows 8上运行PostgreSQL。我在大型连接上的磁盘空间不足。如何更改存储“散列连接临时文件”的临时目录?
我正在查看PostgreSQL配置文件,但我没有看到tmp文件目录。
注意:我正在使用一个设置为主键的变量文本字段合并两个包含1000万行的表。
这是我的疑问:
UPDATE blocks
SET "PctBlack1" = race_blocks."PctBlack1"
FROM race_blocks
WHERE race_blocks.esriid = blocks.geoid10
答案 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:驱动器上。