除了将其用于交换空间之外,我还将使用Azure虚拟机(Ubuntu 14.04 OS)中的临时存储来存储Postgresql临时文件。
为了启用这个function,我必须在/$PGDATA/base/pgsql_tmp创build一个指向/mnt/pgsql_tmp的符号链接。 所以应该是ln -s /mnt/pgsql_tmp $PGDATA/base/pgsql_tmp 。
这可以合理确保所有临时文件都存储在基于SSD的临时存储中并从中读取。 但是,一个棘手:用户postgres没有权限写入/mnt :
drwxr-xr-x 4 root root 4.0K Mar 18 12:40 mnt
我如何确保postgres在/mnt上也有写权限? 我应该做一个sudo chmod -R 777 /mnt并且完成它吗?
我知道这是基本的,但由于它是一个生产服务器,我已经在/mnt设置了swap,我不想错误地configuration它,并在明天遇到问题。
ps这是临时存储目前的样子:
Filesystem Size Used Avail Use% Mounted on /dev/sdb1 221G 9.9G 200G 5% /mnt
ln -sTf /mnt/pgsql_tmp $PGDATA/base/pgsql_tmp # did you get that correct? chown -R postgres /mnt/pgsql_tmp chmod o+x /mnt # note: no -R, this turns 750 to 751 for /mnt only
效果:
su - postgres echo 1 > /mnt/file # fails ls /mnt # fails cat /mnt/anything # fails echo 1 > /mnt/pgsql_tmp/file # works ls /mnt/pgsql_tmp # works cat /mnt/pgsql_tmp/file # works
chmod o+x表示给予他们+ e [x] ecute位,这使得他们有权在/mnt遍历任何子目录。 /mnt /mnt/pgsql_tmp不需要其他权限
为了允许用户postgres写入文件夹,最好使他成为文件夹的owner ,而不是给所有人读写访问权限。
如果/mnt只能被postgres使用,那么你应该让postgres成为/mnt文件夹的所有者及其所有子文件夹
sudo chown -R /mnt postgres
您可能只想为/mnt的子文件夹(例如/mnt/pgsql_tmp
sudo chown -R /mnt/pgsql_tmp postgres