manage.pyに特定のPostgreSQLスキーマで動作するように指示するにはどうすればよいですか?
私のデータベースは、データを分離するために、クライアント/デプロイメントごとに1つずつ、複数のスキーマに分割されています。
ただし、Djangoはスキーマをあまりサポートしていないようです。manage.pyを使用して特定のスキーマのモデルなどを生成するにはどうすればよいですか?
manage.pyに特定のPostgreSQLスキーマで動作するように指示するにはどうすればよいですか?
私のデータベースは、データを分離するために、クライアント/デプロイメントごとに1つずつ、複数のスキーマに分割されています。
ただし、Djangoはスキーマをあまりサポートしていないようです。manage.pyを使用して特定のスキーマのモデルなどを生成するにはどうすればよいですか?
デフォルトのスキーマをデータベースユーザーに割り当てるか、正確には、スキーマ検索パスをユーザーに割り当てることができます。そのパスに単一のスキーマのみが含まれている場合は、ユーザーのデフォルトスキーマを効果的に設定します。
次に、修飾されていないオブジェクト名(テーブル、ビュー、関数など)がパスに沿って検索されます。修飾されていないCREATEステートメントは、検索パスの最初のスキーマにオブジェクトを作成します。
したがって、必要なのは、Djangeがデータベースへの接続に使用するユーザーを変更することだけです。
alter user django_user set search_path to the_one_schema;
commit;
その後、たとえばacreate table foo
はスキーマにテーブルを作成しますthe_one_schema
。
変更を「アクティブ」にするには、ログオフしてから再度ログオンする必要があります。
最終的に機能したものは次のとおりです。
スキーマを認識したいコマンド(syncdb、migrate、changepassword)のラッパーである新しいmanage.pyコマンドを作成し、次の方法でスキーマを手動で選択しました。
from django.db import connection
cursor = connection.cursor()
cursor.execute('SET search_path TO ' + my_little_schema)