如何在PostgreSQL中修复丢失的PostGIS SRID?

时间:2013-11-17 14:25:05

标签: postgresql rspec postgis

运行Rspec测试套件时收到以下错误:

PG::InternalError: ERROR:  GetProj4StringSPI: Cannot find SRID (4326) in spatial_ref_sys

我知道我启用了PostGIS扩展程序。我该如何解决这个问题?

3 个答案:

答案 0 :(得分:27)

问题是有些东西从spatial_ref_sys表中删除了行。

就我而言,问题出在我DatabaseCleaner的{​​{1}}配置中。它被配置为删除/截断表。

要防止出现这种情况,请更改配置。对我来说,那是:

spec_helper.rb

现在您需要重新生成该表中的行。使用名为config.before(:suite) do DatabaseCleaner.strategy = :deletion, {:except => %w[spatial_ref_sys]} DatabaseCleaner.clean_with :truncation, {:except => %w[spatial_ref_sys]} end 的脚本来执行此操作。

我使用Postgres.app,因此运行该脚本的命令是:

spatial_ref_sys.sql

您的命令可能略有不同。

答案 1 :(得分:7)

正在运行rake db:test:prepare应恢复spatial_ref_sys中的值。

更新:这已在版本1.4.1中修复:https://github.com/DatabaseCleaner/database_cleaner/pull/328

database_cleaner版本1.4.0中存在错误,因此您需要指定表异常的架构:

DatabaseCleaner.strategy = :truncation, { except: ["public.spatial_ref_sys"] }
DatabaseCleaner.clean_with :truncation, { except: ["public.spatial_ref_sys"] }

在1.4.0版中,架构作为表名的一部分返回。见https://github.com/DatabaseCleaner/database_cleaner/pull/282

答案 2 :(得分:1)

这是因为没有spatial_ref_sys表。使用以下内容插入此表:

psql -d country -f /usr/share/postgresql/9.3/contrib/postgis-2.1/spatial_ref_sys.

country是数据库名称,/usr/share/.../spatial_ref_sys.sql是存储文件的路径。这对我有用。