将本地数据库推送到Heroku时如何添加Postgres扩展

gab6jxml  于 2022-11-13  发布在  其他
关注(0)|答案(1)|浏览(156)

我有一个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进程的一部分来运行呢?

l3zydbqr

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

相关问题