【问题标题】:PostgreSQL - How to change tmp directory?PostgreSQL - 如何更改 tmp 目录?
【发布时间】:2023-03-11 06:55:02
【问题描述】:

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

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

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

这是我的查询:

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

【问题讨论】:

    标签: postgresql


    【解决方案1】:

    首先,确保您对这些列(两个表的)都有索引。这将使 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;
    

    【讨论】:

    • 我可以在 C 上创建表空间,但是当我在 F 上创建表空间时,我得到:“错误:无法在目录“f:/pgtemp”上设置权限:权限被拒绝”
    • 我以管理员身份运行 Windows 8。
    • @AaronKreider,权限应该设置为运行PostgreSQL服务的用户,通常命名为postgres
    • 如何更改这些权限?在 Windows 控制面板中,我只看到 Administrator、Aaron 和 Guest。
    • 我或许可以在 Windows 中创建符号链接。
    【解决方案2】:

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

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

    【讨论】:

    • 这在我第一次尝试时有效,但下一次它导致 OpenGeo 套件和 PostgreSQL 在加载时崩溃。
    • Aaron,您是否能够诊断出崩溃的原因,或者符号链接安排是否适合您?崩溃是否是由我在刚刚为 MatheusOI 的回答留下的评论中所写的内容引起的?
    • 哈桑 - 我不确定。此后,我已将整个设置移至具有更多空间的新磁盘。
    • 哦,所以符号链接的安排对你来说从来没有成功过,嗯?
    • 我不确定,因为它是 3 年前的,我不记得了。我可能只需要一两次大量的磁盘空间,然后就没有使用它(因为我不经常修改那个数据库表)。我可以说我从来没有故意使用过 ramdisk(除非 windows 自动这样做)
    猜你喜欢
    • 1970-01-01
    • 2017-04-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多