我使用 OpenGeo Suite 在 Windows 8 上运行 PostgreSQL。我在大型连接上的磁盘空间不足。如何更改存储“哈希连接临时文件”的临时目录?
我正在查看 PostgreSQL 配置文件,但没有看到 tmp 文件目录。
注意:我正在使用设置为主键的可变文本字段合并两个包含 1000 万行的表。
这是我的查询:
UPDATE blocks
SET "PctBlack1" = race_blocks."PctBlack1"
FROM race_blocks
WHERE race_blocks.esriid = blocks.geoid10
Run Code Online (Sandbox Code Playgroud)
首先,确保您在(两个表的)这些列上都有一个索引。这将使 PostgreSQL 使用更少的临时文件。另外,将 GUC 设置work_mem
得尽可能高,以使 PostgreSQL 使用更多内存进行此类操作。
现在,如果仍然需要更改临时路径,您首先需要创建一个表空间(如果您还没有这样做):
CREATE TABLESPACE temp_disk LOCATION 'F:\pgtemp';
Run Code Online (Sandbox Code Playgroud)
然后,您必须设置 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
Run Code Online (Sandbox Code Playgroud)
还有一件事,用户必须CREATE
有权使用它:
GRANT CREATE ON TABLESPACE temp_disk TO app_user;
Run Code Online (Sandbox Code Playgroud)