如何将PostGIS扩展移出Heroku Postgres数据库中的模式heroku_ext?

6tqwzwtp  于 12个月前  发布在  其他
关注(0)|答案(1)|浏览(120)

我在Heroku上的Postgresql数据库和Python/Django Rest Framework项目的PostGIS扩展中遇到了以下问题。当尝试发布应用程序时,我得到以下错误:

Traceback (most recent call last):
  File "/app/.heroku/python/lib/python3.11/site-packages/django/db/backends/utils.py", line 82, in _execute
    return self.cursor.execute(sql)
           ^^^^^^^^^^^^^^^^^^^^^^^^
psycopg2.errors.UndefinedTable: relation "public.spatial_ref_sys" does not exist
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
  File "/app/manage.py", line 28, in <module>
    execute_from_command_line(sys.argv)
  File "/app/.heroku/python/lib/python3.11/site-packages/django/core/management/__init__.py", line 419, in execute_from_command_line
    utility.execute()
  File "/app/.heroku/python/lib/python3.11/site-packages/django/core/management/__init__.py", line 413, in execute
    self.fetch_command(subcommand).run_from_argv(self.argv)

(…)

  File "/app/.heroku/python/lib/python3.11/site-packages/django/db/backends/utils.py", line 82, in _execute
    return self.cursor.execute(sql)
           ^^^^^^^^^^^^^^^^^^^^^^^^
django.db.utils.ProgrammingError: relation "public.spatial_ref_sys" does not exist

字符串
据我所知,问题是由于PostGIS扩展(及其表spatial_ref_sys)应该在模式public中,同时,根据以前的标准,它在heroku_ext中。然而,目前扩展安装在模式public中,根据this article,并且发布过程要求它们安装在模式public中。
但是,我尝试将PostGIS扩展从heroku_ext移动到public的尝试失败。调用命令:

ALTER extension postgis SET SCHEMA public;


我得到一个错误:

ERROR: must be owner of extension postgis


this article中,Heroku支持声明:
在启用Heroku Data Labs功能后,您可以重新安装或重新定位扩展到任何您想要的模式。一旦启用,扩展的类型和功能将转到相应的模式(通常为public),并且不会向heroku_ext添加任何新内容。
然而,这种解决方案并不起作用,因为命令:

heroku data:labs:enable extensions-on-any-schema --addon {OUR_DATABASE_URL} -a {OUR_APP_NAME}


(当然要用数据库URL和应用程序名称来完成)返回一个错误:

' Error: Couldn't find that add on.
 ' Error ID: not_found


如何将PostGIS扩展转移到public模式?如果没有这个,我们就无法发布下一个版本的应用程序。
在Stack Overflow上描述了some workarounds,但是,它们需要清空数据库,在这种情况下这是不可能的,因为这是一个生产应用程序,并且再次导入所有数据几乎是不可能的。

jfewjypa

jfewjypa1#

在与Heroku支持团队联系后,发现根本原因是Heroku本身的一个bug。支持团队解决了这个bug,并对我的数据库进行了维护。由于我使用的是Essential tier数据库,不允许手动维护,他们的干预是必要的。通过这些操作,问题得到了解决。
对于那些遇到类似问题的用户,我建议您对数据库进行维护,作为一种潜在的解决方案。但是,如果您的数据库位于Essential层,并且手动维护不可行,最好的方法是联系Heroku支持部门寻求帮助,并要求他们进行维护。

相关问题