Bash PostgreSQL:从脚本执行查询
我正在使用Vagrant和virtual Box在CentOS 7虚拟机上安装PostgreSQL+POSTGIS 我的流浪文件如下Bash PostgreSQL:从脚本执行查询,bash,postgresql,scripting,vagrant,postgis,Bash,Postgresql,Scripting,Vagrant,Postgis,我正在使用Vagrant和virtual Box在CentOS 7虚拟机上安装PostgreSQL+POSTGIS 我的流浪文件如下 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 = "
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
在/scripts/InstallPostgresqlPostgis.sh
中有所有用于安装PostgreSQL的命令,运行时,PostgreSQL将被安装并工作
要在我的PostgreSQL安装中以交互方式添加POSTGIS,我使用以下过程
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
但结果是
default: could not change directory to "/home/vagrant": Permission denied
default: CREATE EXTENSION
default: could not change directory to "/home/vagrant": Permission denied
default: CREATE EXTENSION
default: could not change directory to "/home/vagrant": Permission denied
default: CREATE EXTENSION
default: could not change directory to "/home/vagrant": Permission denied
default: CREATE EXTENSION
default: could not change directory to "/home/vagrant": Permission denied
default: CREATE EXTENSION
default: could not change directory to "/home/vagrant": Permission denied
default: CREATE EXTENSION
default: could not change directory to "/home/vagrant": Permission denied
default: CREATE EXTENSION
我哪里做错了?您的问题是使用工作目录执行命令
postgres
用户无法访问。实际上,它是执行命令的用户的主目录(vagrant
)
解决此问题有三种方法:
--login
(或简称-i
)选项来sudo
这将导致
sudo
以类似于登录shell的设置执行命令。特别是,这将(尝试)更改为目标用户的主目录作为工作目录
cd~postgres
这将导致在那里执行所有sudo命令
postgres
访问用户vagrant
这很危险,绝对不推荐
我只是为了完整起见才提到它。这可能是一种选择 您需要定期访问此网站
您手头有一些细粒度的访问控制(例如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"
这听起来像是从当前工作目录(/home/vagrant)执行命令(sudo…),postgres用户无法访问该目录。你可能想检查一下……可能是。。。。当我执行shell脚本时,我在
/home/vagrant
目录中,该目录是用户vagrant
的主目录。。。。我已经看到用户postgres
的主目录是/var/lib/pgsql
。。。。你知道我如何在shell脚本中更改目录或更改用户(同时修改我的方法…)吗?-I
选项在脚本中对我非常有用。例如,有一行代码运行得很好,当我提供一个本地开发虚拟机时,我给了postgres用户一个密码,比如sosudo-u postgres-I psql-u postgres-d postgres-c“使用密码更改用户postgres;”“
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"