升级到Rails 4时出现Postgis错误

时间:2014-04-08 20:47:21

标签: ruby-on-rails-4 postgis postgresql-9.3

我和我的团队目前正在进行维护阶段,我一直在忙着升级所有东西。上周,我将团队从PostgreSQL 9.1移至9.3,将PostGIS 1.5移至2.1,这一切都顺利进行。昨天,Rails团队提交了一份Rails 4升级拉取请求,我们的CI迅速拒绝了。任何建议都将不胜感激。

尝试创建新的测试数据库时,收到以下Rails错误:

PG::RaiseException: ERROR:  PostGIS is already installed in schema 'public', uninstall it first : CREATE EXTENSION postgis SCHEMA public

一些规格:

  • Debian 7 Wheezy
  • PostgreSQL 9.3
  • PostGIS 2.1
  • Ruby 2.1.0
  • Rails 4

我的PostgreSQL / PostGIS安装步骤:

sh -c 'echo "deb http://apt.postgresql.org/pub/repos/apt/ wheezy-pgdg main" >> /etc/apt/sources.list'
wget --quiet -O - http://apt.postgresql.org/pub/repos/apt/ACCC4CF8.asc | sudo apt-key add -
apt-get update -y

apt-get install postgresql-9.3-postgis-2.1

sudo -u postgres psql -c "CREATE USER xxadmin WITH PASSWORD 'xxpass';"
sudo -u postgres psql -c "ALTER USER xxadmin WITH SUPERUSER;"

sudo -u postgres psql -c "create database template_postgis with template = template1;"
sudo -u postgres psql -c "UPDATE pg_database SET datistemplate = TRUE where datname = 'template_postgis';"
sudo -u postgres psql -d template_postgis -f /usr/share/postgresql/9.3/extension/postgis--2.1.2.sql
sudo -u postgres psql -d template_postgis -c "GRANT ALL ON geometry_columns TO xxadmin;"
sudo -u postgres psql -d template_postgis -c "GRANT ALL ON spatial_ref_sys TO xxadmin;"
sudo -u postgres psql -d template_postgis -c "VACUUM FREEZE;"
sudo -u postgres psql -c "ALTER DATABASE template_postgis OWNER TO xxadmin;"
sudo -u postgres psql -d template_postgis -c "ALTER VIEW geography_columns OWNER to xxadmin;"
sudo -u postgres psql -d template_postgis -c "ALTER TABLE geometry_columns OWNER to xxadmin;"
sudo -u postgres psql -d template_postgis -c "ALTER TABLE spatial_ref_sys OWNER to xxadmin;"

1 个答案:

答案 0 :(得分:1)

目前有一些不同的方法可以使用PostGIS在空间上启用PostgreSQL数据库:

  1. 使用DDL命令CREATE EXTENSION postgis;最简单,最推荐。
  2. 使用enabler scripts。此方法有多个步骤,如果您有特定要求,则非常有用,例如禁止使用栅格支持。
  3. 使用a template (e.g. template_postgis)数据库。这对于设置具有类似功能的多个数据库非常有用。有时template_postgis已预先安装,有时您需要创建它。