简体   繁体   中英

PostgreSQL - How to change tmp directory?

I am running PostgreSQL on Windows 8 using the OpenGeo Suite. I'm running out of disk space on a large join. How can I change the temporary directory where the "hash-join temporary file" gets stored?

I am looking at the PostgreSQL configuration file and I don't see a tmp file directory.

Note: I am merging two tables with 10 million rows using a variable text field which is set to a primary key.

This is my query:

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

First, make sure you have an index on these columns (of both tables). This would make PostgreSQL use less temporary files. Also, set the GUC work_mem to as high as possible, to make PostgreSQL use more memory for operations like this.

Now, if still need, to change the temporary path, you first need to create a tablespace (if you didn't do it already):

CREATE TABLESPACE temp_disk LOCATION 'F:\pgtemp';

Then, you have to set the GUC temp_tablespaces . You can set it per database, per user, at postgresql.conf or inside the current session (before your query):

SET temp_tablespaces TO 'temp_disk';

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

One more thing, the user must have CREATE privilege to use this:

GRANT CREATE ON TABLESPACE temp_disk TO app_user;

I was unable to set the F:/pgtemp directory directly in PostgreSQL due to a lack of permissions.

So I created a symlink to it using the windows command line "mklink /D" (a soft link). Now PostgreSQL writes temporary files to c:\\Users\\Administrator.opengeo\\pgdata\\Administrator\\base\\pgsql_tmp they get stored on the F: drive.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM