我有一个Django应用程序,它依赖于postgis
Postgres扩展。
我想使用pg:push
将我的本地数据库复制到Heroku,但是我收到了大量的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
进程的一部分来运行呢?
1条答案
按热度按时间l3zydbqr1#
文档指示您不能推送到非空数据库:
...为了防止意外的数据覆盖和丢失,远程数据库必须为空。系统会提示pg:reset a remote database that is not empty...
https://devcenter.heroku.com/articles/managing-heroku-postgres-using-cli#pg-push
还有,你在做你的迁移吗?事实上,django正在吐出关系错误,这让我认为它正在向那个方向倾斜。
1.删除本地应用程序的migrations文件夹中的文件,将
__init__.py
文件保留在那里。1.运行
python manage.py makemigrations
1.运行
python manage.py migrate
1.重置heroku数据库,使其为空,并准备好供您推送。
1.将具有更新迁移的应用程序部署到heroku。
1.运行
heroku run python manage.py migrate