Как исправить недостающие Сриды PostGIS в PostgreSQL?

Я получил следующую ошибку при запуске моего набора тестов Rspec:

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

Я знаю, что я включил расширение PostGIS. Как это исправить?

3 ответов


проблема в том, что что-то удалил строки spatial_ref_sys таблица.

в моем случае, проблема была в моем DatabaseCleaner настройки в моем 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

теперь вам нужно будет восстановить строки в этой таблице. Используйте скрипт с именем spatial_ref_sys.sql для этого.

Я использую Postgres.app, поэтому команда для запуска этого скрипт:

/Applications/Postgres.app/Contents/MacOS/bin/psql -d database_name -f /Applications/Postgres.app/Contents/MacOS/share/contrib/postgis-2.0/spatial_ref_sys.sql

ваша команда может немного отличаться.


под управлением rake db:test:prepare восстановить значения в spatial_ref_sys.

UPDATE: это исправлено в версии 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


это связано с отсутствием 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 - это путь, в котором хранится мой файл. Это работает для меня.