PostgreSQL - 如何更改临时目录?

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
2个回答

5

首先,请确保这些列(两个表格中的列)有索引。这将使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盘创建时出现以下错误提示: "ERROR: could not set permissions on directory "f:/pgtemp": Permission denied" - Aaron Kreider
我正在以管理员身份运行Windows 8。 - Aaron Kreider
@AaronKreider,权限应该设置为运行PostgreSQL服务的用户,通常命名为“postgres”。 - MatheusOl
我该如何更改这些权限?在Windows控制面板中,我只看到了管理员、Aaron和Guest。 - Aaron Kreider
我可能能够在Windows中创建符号链接。 - Aaron Kreider
显示剩余2条评论

0

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

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


这个在我第一次尝试时起作用了,但下一次加载时导致OpenGeo套件和PostgreSQL崩溃。 - Aaron Kreider
Aaron,你最终能否诊断出这个崩溃的原因,还是符号链接安排对你来说很好?这个崩溃可能是由我在下面留给MatheusOI答案的评论中所写的引起的吗? - Hassan Baig
Hassan - 我不确定。我已经将整个设置迁移到一个新的磁盘,拥有更多的空间。 - Aaron Kreider
哦,符号链接的安排对你来说从未奏效,是吗? - Hassan Baig
我不确定,因为那是3年前的事情,我已经记不清了。可能我只需要一两次大量的磁盘空间,然后就再也没有用过了(因为我不经常修改那个数据库表)。我可以说我从未有意使用过ramdisk(除非Windows自动执行此操作)。 - Aaron Kreider

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接