PostgreSQL:从脚本执行查询

时间:2019-02-24 19:47:59

标签: bash postgresql scripting vagrant postgis

我正在使用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"

我在哪里做错了?

2 个答案:

答案 0 :(得分:0)

您的问题是您正在使用工作目录执行命令 postgres用户无法访问。实际上,这是执行命令(vagrant的用户的主目录。

有三种方法可以解决此问题:

  1. --login使用-i(或简称为sudo)选项
    这将导致sudo以类似于登录shell的设置执行命令。
    尤其是,它将(尝试)更改为目标用户的主目录作为工作目录。

  2. 使用cd ~postgres更改脚本中的工作目录
    这将导致所有sudo命令都将在那里执行。

  3. 允许用户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"