我正在使用Vagrant和Virtual Box在CentOS 7虚拟机上安装PostgreSQL + POSTGIS。
我的Vagtantfile是以下…
Vagrant.configure(“2”)执行| config | config.vm.box =“centos / 7” …
您的问题是您正在使用工作目录执行命令 那是无法访问的 postgres 用户。实际上它是执行命令的用户的主目录( vagrant )。
postgres
vagrant
有三种方法可以解决此问题:
使用 --login (要么 -i 简而言之 sudo 这将导致 sudo 使用类似于登录shell的设置执行命令。 特别是这将(尝试)更改为目标用户的主目录作为工作目录。
--login
-i
sudo
使用更改脚本中的工作目录 cd ~postgres 这将导致所有sudo命令将在那里执行。
cd ~postgres
允许用户 postgres 访问用户的主目录 vagrant 的 这是危险的,绝对不推荐! 强> 我只是提到它的完整性。它可能是一个选项iff 你经常需要这样的访问 你有一些细粒度的访问控制(例如ACL) 这可以确保 postgres 真的是唯一被授予访问权限的用户。 即便如此,你应该三思而后行! 在大多数情况下,替代品1或2是优选的。
我用这种方式解决了......
sudo su postgres sudo -u postgres -H -- psql -d postgres -c "CREATE EXTENSION postgis" sudo -u postgres -H -- psql -d postgres -c "CREATE EXTENSION postgis_topology" sudo -u postgres -H -- psql -d postgres -c "CREATE EXTENSION postgis_sfcgal" sudo -u postgres -H -- psql -d postgres -c "CREATE EXTENSION fuzzystrmatch" sudo -u postgres -H -- psql -d postgres -c "CREATE EXTENSION address_standardizer" sudo -u postgres -H -- psql -d postgres -c "CREATE EXTENSION address_standardizer_data_us" sudo -u postgres -H -- psql -d postgres -c "CREATE EXTENSION postgis_tiger_geocoder"