Estou usando o Postgres 9.5.4 no Ubuntu 14.04. Tenho meus dados do Postgres em uma partição de disco separada, que está ficando bastante cheia.
myuser@myproject:~$ df -h /mnt/volume-nyc1-01/
Filesystem Size Used Avail Use% Mounted on
/dev/sda 99G 93G 413M 100% /mnt/volume-nyc1-01
Quero excluir alguns dados da minha partição, mas isso se tornou um desafio. Em particular, quando executo algumas consultas, recebo resultados como este
myproject_production=> select count(*) FROM my_object_times rt1, my_object_times rt2 where rt1.my_object_id = rt2.my_object_id and rt1.name = rt2.name and rt1.time_in_ms = rt2.time_in_ms and rt1.id > rt2.id;;
ERROR: could not write block 52782 of temporary file: No space left on device
Quero liberar algum espaço temporário para poder executar consultas e identificar quais dados preciso excluir. Eu tenho algum outro espaço livre em outra partição. Como aponto minha variável pgsql_tmp para que eu possa executar as consultas de que preciso?
Editar:
Como a opção de link simbólico parecia ser a menos invasiva, dei uma chance, configurando coisas assim
myuser@myproject:~$ sudo ls -al /mnt/volume-nyc1-01/postgresql/9.5/main/base/pgsql_tmp
lrwxrwxrwx 1 root root 14 Apr 10 18:01 /mnt/volume-nyc1-01/postgresql/9.5/main/base/pgsql_tmp -> /opt/pgsql_tmp
myuser@myproject:~$ cd /opt
myuser@myproject:/opt$ df -h /
Filesystem Size Used Avail Use% Mounted on
/dev/disk/by-uuid/050e1e34-39e6-4072-a03e-ae0bf90ba13a 40G 24G 15G 62% /
Você pode ver que tenho mais de 16 GB disponíveis na partição para a qual apontei, mas ainda recebo os erros
ERROR: could not write block 1862514 of temporary file: No space left on device
Do manual
Para poder usar isso, você precisa criar um tablespace nesse volume, criar um diretório lá (de propriedade do
postgres
usuário!)Você precisa conceder os privilégios necessários nesse tablespace:
Depois disso, você pode, por exemplo, usar
(alternativamente, você pode simplesmente mudar isso em sua sessão)
Observe que para
alter system
ter algum efeito, você precisa recarregar a configuração:Como alternativa, basta alterar o
$PGDATA/base/pgsql_tmp
para ser um link simbólico para o diretório na outra partição.