GeoDjango inspectdb 与多个数据库

Posted

技术标签:

【中文标题】GeoDjango inspectdb 与多个数据库【英文标题】:GeoDjango inspectdb with multiple databases 【发布时间】:2019-08-30 16:20:22 【问题描述】:

我正在尝试使用 Postgis 在 PostgreSQL 数据库上运行 inspectdb

要为 postgresql 视图生成模型,我发现 here 我应该使用以下命令:

python manage.py inspectdb --database my_schema my_view> my_view_legacy.py

但由于 PostGIS,inspectdb 也会尝试访问另一个架构中的视图,当遇到 my_view 中的 geometry 类型的字段时会引发以下错误:

django.db.utils.ProgrammingError: relation "geometry_columns" does not exist
LINE 1: SELECT "coord_dimension", "srid", "type" FROM "geometry_colu...

这似乎是catch-22:如果我指定数据库名称以便inspectdb 知道要检查哪个视图,它在public 架构中找不到geometry_columns 视图。但是如果我不指定任何数据库名称,它首先找不到my_view

有什么解决办法吗?

我的数据库架构定义为:

DATABASES = 

    'default': 
            
            ,

    'public': 
            
            'ENGINE': 'django.db.backends.postgresql_psycopg2',
            'OPTIONS': 
                            'options': '-c search_path=public'
                        ,
            'NAME': 'my_db',
            'USER': secrets.USER,
            'PASSWORD': secrets.PASSWORD,
            'HOST': 'my.host.addr',
            'PORT': '5432',
            ,

    'my_schema': 
            
            'ENGINE': 'django.contrib.gis.db.backends.postgis', 
            'OPTIONS': 
                            'options': '-c search_path=my_schema'
                        ,
            'NAME': 'my_db',
            'USER': secrets.USER,
            'PASSWORD': secrets.PASSWORD,
            'HOST': 'my.host.addr',
            'PORT': '5432',
            ,    

【问题讨论】:

【参考方案1】:

我在指定的架构中复制了 geometry_columnsgeography_columns,以便 GeoDjango 可以找到它们。

【讨论】:

以上是关于GeoDjango inspectdb 与多个数据库的主要内容,如果未能解决你的问题,请参考以下文章

数据库表反向生成 Django ORM inspectdb

数据库表反向生成django ORM inspectdb

如何使用没有geodjango的django模型类型存储mysql几何数据类型?

geodjango 同步数据库错误。来自 geodjango 教程

在 GeoDjango 中将多边形层与多边形相交

ORA-00904: "IDENTITY_COLUMN": 使用 INSPECTDB DJANGO 的标识符无效错误