如何让Django将表放在不同的模式中

时间:2013-05-20 19:02:41

标签: django django-models postgis database-backups geodjango

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

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

1 个答案:

答案 0 :(得分:0)

我通常使用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)

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

Django会在您列出的任何模式中找到表格,但只会在列表中的第一个模式中创建。

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