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