5

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

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

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

这是我的查询:

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

2 回答 2

5

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

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

CREATE TABLESPACE temp_disk LOCATION 'F:\pgtemp';

然后,您必须设置 GUC temp_tablespacespostgresql.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;
于 2013-09-11T01:21:49.010 回答
0

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

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

于 2013-09-16T02:10:48.883 回答