1

我有一个运行 PostGIS 2 的 GeoDjango (Django 1.5) 应用程序。传统上,在没有 PostGIS 的情况下备份 PostgreSQL 数据库时,我会使用 pg_dump。PostGIS 文档也建议使用 pg_dump,但也将所有要备份的表放在单独的(非公共)模式中。然后,在进行备份时,只需备份非公共模式中的表,这样就不会备份所有 PostGIS 对象。

我遇到的问题是如何让 Django 将表放在单独的模式中。我在各种论坛上看到了不同的建议,但没有一个专门针对 GeoDjango。

4

1 回答 1

1

我通常通过 connection_created 信号控制 Django 使用的模式。这样的东西在 manage.py 和 wsgi.py 中都有效(这直接来自我的 wsgi.py)。

DONE = []
def set_schema(sender, **kwargs):
    if DONE:
        return
    DONE[:] = [1]
    from django.db import connection
    cursor = connection.cursor()
    cursor.execute("set search_path to my_schema, public;")
    DONE[:] = []

from django.db.backends.signals import connection_created
connection_created.connect(set_schema)

丑陋是为了防止递归,在DONEDjango 1.4 或 1.5 之前不需要。

Django 将在您列出的任何模式中查找表,但只会在列表的第一个中创建它们。

https://docs.djangoproject.com/en/1.5/ref/signals/#connection-created

于 2013-09-23T18:50:09.383 回答