3

manage.pyに特定のPostgreSQLスキーマで動作するように指示するにはどうすればよいですか?

私のデータベースは、データを分離するために、クライアント/デプロイメントごとに1つずつ、複数のスキーマに分割されています。

ただし、Djangoはスキーマをあまりサポートしていないようです。manage.pyを使用して特定のスキーマのモデルなどを生成するにはどうすればよいですか?

4

2 に答える 2

4

デフォルトのスキーマをデータベースユーザーに割り当てるか、正確には、スキーマ検索パスをユーザーに割り当てることができます。そのパスに単一のスキーマのみが含まれている場合は、ユーザーのデフォルトスキーマを効果的に設定します。

次に、修飾されていないオブジェクト名(テーブル、ビュー、関数など)がパスに沿って検索されます。修飾されていないCREATEステートメントは、検索パスの最初のスキーマにオブジェクトを作成します。

したがって、必要なのは、Djangeがデータベースへの接続に使用するユーザーを変更することだけです。

alter user django_user set search_path to the_one_schema;
commit;

その後、たとえばacreate table fooはスキーマにテーブルを作成しますthe_one_schema

変更を「アクティブ」にするには、ログオフしてから再度ログオンする必要があります。

于 2012-10-15T22:05:35.943 に答える
2

最終的に機能したものは次のとおりです。

スキーマを認識したいコマンド(syncdb、migrate、changepassword)のラッパーである新しいmanage.pyコマンドを作成し、次の方法でスキーマを手動で選択しました。

from django.db import connection
cursor = connection.cursor()
cursor.execute('SET search_path TO ' + my_little_schema)
于 2012-11-05T21:31:12.447 に答える