Conselhos sobre o uso do postgresql temp_tablespace

1

Estou executando uma consulta que (suponho) gera uma grande quantidade de informações temporárias, pois recebo o seguinte erro:

ERROR:  could not write block 16451641 of temporary file: No space left on device
HINT:  Perhaps out of disk space?

********** Error **********

ERROR: could not write block 16451641 of temporary file: No space left on device
SQL state: 53100
Hint: Perhaps out of disk space?

Eu fiz uma pasta tmp_tablespace na minha unidade G: e, em seguida, editei postgresql.conf e reiniciei o banco de dados.

#------------------------------------------------------------------------------
# CLIENT CONNECTION DEFAULTS
#------------------------------------------------------------------------------

# - Statement Behavior -

#search_path = '"$user",public'     # schema names
#default_tablespace = ''        # a tablespace name, '' uses the default
temp_tablespaces = 'G:/tmp_tablespace/'         # a list of tablespace names, '' uses

Tanto quanto eu posso dizer, o espaço de tabela temporário não está sendo usado, como nenhum arquivo está escrito lá (pelo menos nenhum que eu possa ver ao atualizar). No menu Options do Windows, Show Hidden Files está marcado e atualizei a pasta algumas vezes enquanto esse processamento estava em execução, além de verificar o tamanho da pasta que ficou em 0.

No meu código SQL, também tentei usar as linhas SET temp_tablespaces('G:\tmp_tablespace'); e temp_tablespaces('G:\tmp_tablespace'); , mas ambas as linhas retornaram mensagens de erro.

Estou usando o PostGreSQL 9.1 de 32 bits e o Windows 7. Existem outras configurações que eu deveria verificar? Minha instalação do PostGreSQL está na unidade C:\ e o espaço de tabela associado está na unidade G:\ .

    
por celenius 21.02.2012 / 16:07

2 respostas

2

Você precisa criar o novo espaço de tabela com CREATE TABLESPACE e, em seguida, especificar o nome do espaço de tabela em sua configuração, não o nome do diretório subjacente.

    
por 21.02.2012 / 16:33
1

Depois de fazer a pasta tmp na unidade J, a abordagem que fiz foi a seguinte:

CREATE TABLESPACE dbspace_tmp LOCATION 'J:\tmp';
CREATE DATABASE dbspace_tmp tablespace dbspace_tmp;
ALTER DATABASE my_db SET temp_tablespaces = dbspace_tmp;

Isso parece estar funcionando, pois criou um arquivo nesse local e parece estar armazenando dados temporários nele.

    
por 22.02.2012 / 02:21