我在 Ubuntu 14.04 上使用 Postgres 9.5.4。我的 Postgres 数据位于一个单独的磁盘分区上,该分区已满。
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
我想从我的分区中删除一些数据,但这变得具有挑战性。特别是,当我运行一些查询时,我得到这样的结果
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
我想释放一些临时空间,以便我可以运行查询并确定我需要删除哪些数据。我在另一个分区上有一些其他可用空间。如何将我的 pgsql_tmp 变量指向那里以便我可以运行我需要的查询?
编辑:
由于符号链接选项似乎是侵入性最小的,我试了一下,设置这样的东西
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% /
您可以看到我指向的分区上有超过 16GB 的可用空间,但仍然出现错误
ERROR: could not write block 1862514 of temporary file: No space left on device
从手册
为了能够使用它,您需要在该卷上创建一个表空间,在那里创建一个目录(归
postgres
用户所有!),然后运行:您需要在该表空间上授予必要的权限:
之后,您可以例如使用
(或者你可以在你的会话中改变它)
请注意,要使
alter system
生效,您需要重新加载配置:或者,只需将 更改为
$PGDATA/base/pgsql_tmp
指向另一个分区上目录的符号链接。