我正在使用Vagrant和Virtual Box在CentOS 7虚拟机上安装PostgreSQL + POSTGIS。
以下是我的Vagtantfile ...
.search-box:hover {
left: 92%;
}
Vagrant.configure("2") do |config|
config.vm.box = "centos/7"
config.vm.network "private_network", ip: "192.168.56.2"
config.vm.provider "virtualbox" do |vb|
vb.memory = "4096"
vb.name = "Test"
end
config.vm.provision "shell", path: "./scripts/InstallPostgresqlPostgis.sh"
end
中包含安装PostgreSQL的所有命令,并且在运行时会安装并运行PostgreSQL。
要以交互方式在我的PostgreSQL安装中添加POSTGIS,请使用以下过程
./scripts/InstallPostgresqlPostgis.sh
以及所有作品。
我必须在我的Vagrantfile中引用的su postgres
----->>>>>>> HERE I'VE TO PUT THE USER PASSWORD <<<<<<<-------
psql
-- Enable PostGIS (includes raster)
CREATE EXTENSION postgis;
-- Enable Topology
CREATE EXTENSION postgis_topology;
-- Enable PostGIS Advanced 3D
-- and other geoprocessing algorithms
-- sfcgal not available with all distributions
CREATE EXTENSION postgis_sfcgal;
-- fuzzy matching needed for Tiger
CREATE EXTENSION fuzzystrmatch;
-- rule based standardizer
CREATE EXTENSION address_standardizer;
-- example rule data set
CREATE EXTENSION address_standardizer_data_us;
-- Enable US Tiger Geocoder
CREATE EXTENSION postgis_tiger_geocoder;
\q
中“翻译”此过程,并且已经尝试过
InstallPostgresqlPostgis.sh
但结果是...
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"
我在哪里做错了?
答案 0 :(得分:0)
您的问题是您正在使用工作目录执行命令
postgres
用户无法访问。实际上,这是执行命令(vagrant
的用户的主目录。
有三种方法可以解决此问题:
对--login
使用-i
(或简称为sudo
)选项
这将导致sudo
以类似于登录shell的设置执行命令。
尤其是,它将(尝试)更改为目标用户的主目录作为工作目录。
使用cd ~postgres
更改脚本中的工作目录
这将导致所有sudo命令都将在那里执行。
允许用户postgres
访问用户vagrant
的主目录
这是危险的,绝对不建议!!
我只是为了完整性而提到它。可能是一个选择
您需要定期访问
并且手边有一些精细的访问控制(例如ACL)
这样可以确保postgres
确实是唯一被授予访问权限的用户。
即使那样,您也应该考虑三次!
在大多数情况下,首选1.或2.。
答案 1 :(得分:0)
我已经通过这种方式解决了...
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"