我在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,但是,它们需要清空数据库,在这种情况下这是不可能的,因为这是一个生产应用程序,并且再次导入所有数据几乎是不可能的。
1条答案
按热度按时间jfewjypa1#
在与Heroku支持团队联系后,发现根本原因是Heroku本身的一个bug。支持团队解决了这个bug,并对我的数据库进行了维护。由于我使用的是Essential tier数据库,不允许手动维护,他们的干预是必要的。通过这些操作,问题得到了解决。
对于那些遇到类似问题的用户,我建议您对数据库进行维护,作为一种潜在的解决方案。但是,如果您的数据库位于Essential层,并且手动维护不可行,最好的方法是联系Heroku支持部门寻求帮助,并要求他们进行维护。