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.
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:\
.
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.
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.
Tags windows postgresql