Как добавить расширение Postgres при размещении локальной базы данных на Heroku
У меня есть приложение Django, которое полагается на расширение postgis
Postgres.
Я хочу скопировать мою локальную базу данных на Heroku с помощью pg:push
, но получаю многочисленные django.db.utils.ProgrammingError: relation does not exist
ошибки, следующие из:
pg_restore: error: could not execute query: ERROR: type "public.geography" does not exist
LINE 6: coords public.geography(Point,4326),
^
Command was: CREATE TABLE public.outreach_localcompanylocation (
id bigint NOT NULL,
long_name character varying(200) NOT NULL,
city character varying(200) NOT NULL,
country character varying(3) NOT NULL,
coords public.geography(Point,4326),
google_location_id bigint,
state character varying(200)
);
Похоже, это происходит потому, что pg:push
не включает расширение postgis
(обычно включается при выполнении SQL-команды CREATE EXTENSION postgis;
).
Если я пытаюсь включить его вручную на новой базе данных Heroku, а затем запускаю pg:push
, я получаю эту ошибку:
Remote database is not empty. Please create a new database or use heroku pg:reset
Так есть ли способ запустить CREATE EXTENSION postgis;
как часть процесса pg:push
?
В документации указано, что вы не можете нажать на непустую базу данных:
...Чтобы предотвратить случайную перезапись и потерю данных, удаленная база данных должна быть пустой. Вам будет предложено pg:сбросить удаленную базу данных, которая не является пустой...
https://devcenter.heroku.com/articles/managing-heroku-postgres-using-cli#pg-push
Кроме того, делаете ли вы миграции? Тот факт, что django выплевывает ошибки отношений, заставляет меня думать, что он склоняется в эту сторону.
Удалите файлы в папке migrations вашего локального приложения, оставьте там файл
__init__.py
.Запустите
.python manage.py makemigrations
Бег
python manage.py migrate
Перезагрузите базу данных heroku, чтобы она была пуста и готова к продвижению.
Разверните приложение с обновленными миграциями в heroku.
Запустите
.heroku run python manage.py migrate