1

PostGIS 2 で実行されている GeoDjango (Django 1.5) アプリケーションを使用しています。従来、PostGIS を使用せずに PostgreSQL データベースをバックアップする場合は、pg_dump を使用していました。PostGIS のドキュメントでは、pg_dump も使用することを推奨していますが、すべてのテーブルを別の (非公開) スキーマにバックアップすることも推奨しています。次に、バックアップを取るときは、すべての PostGIS オブジェクトもバックアップされないように、非公開スキーマのテーブルをバックアップするだけです。

私が直面している問題は、Django に別のスキーマにテーブルを配置させる方法です。さまざまなフォーラムでさまざまな提案を見てきましたが、特に GeoDjango に対処するものはありません。

4

1 に答える 1

1

私は通常、Django が connection_created シグナルで使用するスキーマを制御します。このようなものは、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

于 2013-09-23T18:50:09.383 に答える