我有一个与PostGIS 2一起运行的GeoDjango(Django 1.5)应用程序。传统上,在没有PostGIS的情况下备份PostgreSQL数据库时,我会使用pg_dump。 PostGIS文档也建议使用pg_dump,但也要将所有表备份到单独的(非公共)模式中。然后,在进行备份时,只需备份非公共模式中的表,这样就不会备份所有PostGIS对象。
我遇到的问题是如何让Django将表放在一个单独的模式中。我在各种论坛上看到了不同的建议,但没有一个专门针对GeoDjango。
答案 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