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

问题描述 投票:0回答:1

我在 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
)预计处于公共架构中,同时,根据以前的标准,它处于
heroku_ext
中。然而,目前,根据
本文
,扩展安装在模式public中,并且发布过程要求它们安装在模式
public
中。

但是,我尝试将 PostGIS 扩展从

heroku_ext
移动到
public
没有成功。调用命令:

ALTER extension postgis SET SCHEMA public;

我收到错误:

ERROR: must be owner of extension postgis

本文中,Heroku 支持指出:

启用 Heroku 数据实验室功能后,您可以重新安装或将扩展重新定位到您想要的任何架构。启用后,未来的扩展将使其类型和功能转到适当的模式(通常是

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 上描述了一些解决方法,但是,它们需要清空数据库,在这种情况下这是不可能的,因为这是一个生产应用程序,并且再次导入所有数据几乎是不可能的。

python heroku django-rest-framework postgis heroku-postgres
1个回答
0
投票

就这个问题联系 Heroku 支持团队后,发现根本原因是 Heroku 本身的错误。支持团队解决了该错误并对我的数据库进行了维护。由于我使用的是基本层数据库,它不允许手动维护,因此他们的干预是必要的。经过这些操作,问题得到解决。

对于那些遇到类似问题的人,我建议对数据库进行维护作为潜在的解决方案。但是,如果您的数据库位于 Essential 层并且手动维护不可行,最好的方法是联系 Heroku 支持寻求帮助并要求他们执行维护。

© www.soinside.com 2019 - 2024. All rights reserved.