除了将其用作交换空间之外,我还将使用 Azure VM(Ubuntu 14.04 OS)中可用的临时存储来存储 Postgresql 临时文件。
为了实现这一点,我必须创建一个/$PGDATA/base/pgsql_tmp
指向的符号链接/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
我不想配置错误并在明天遇到问题。
ps 临时存储目前的样子是这样的:
Filesystem Size Used Avail Use% Mounted on
/dev/sdb1 221G 9.9G 200G 5% /mnt
答案1
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
答案2
为了允许用户postgres
写入文件夹,最好让他成为owner
该文件夹的用户,而不是授予每个人读写权限。
如果/mnt
只应在那时使用postgres
,则应成为文件夹及其所有子文件夹postgres
的所有者/mnt
sudo chown -R /mnt postgres
您可能只想对例如的子文件夹执行此/mnt
操作/mnt/pgsql_tmp
sudo chown -R /mnt/pgsql_tmp postgres