Postgresql
Django postgres 多模式
我正在嘗試為現有的 postgresql 數據庫開發一個 django 介面,該數據庫使用各種模式,查看文獻下面的範例應該可以工作,但它只返回我執行時在預設數據庫中定義的模式
python manaage.py inspectdb
。同樣,當這有效時,如何定義在定義 django 模型時使用哪個模式?DATABASES = { 'default': { 'ENGINE': 'django.db.backends.postgresql_psycopg2', 'OPTIONS' : { 'options': '-c search_path=public' }, 'NAME': 'gygaia', 'USER':'postgres', 'PASSWORD':'abc', 'HOST':'localhost', 'PORT':'5432', }, 'samples': { 'ENGINE': 'django.db.backends.postgresql_psycopg2', 'OPTIONS' : { 'options': '-c search_path=samples' }, 'NAME': 'gygaia', 'USER':'postgres', 'PASSWORD':'abc', 'HOST':'localhost', 'PORT':'5432', }, 'excavation': { 'ENGINE': 'django.db.backends.postgresql_psycopg2', 'OPTIONS' : { 'options': '-c search_path=excavation' }, 'NAME': 'gygaia', 'USER':'postgres', 'PASSWORD':'abc', 'HOST':'localhost', 'PORT':'5432', }, }
這是一個超級簡單的項目範例,其中包含 2 個應用程序和 3 個使用 ForeignKey 相互交叉的方案
https://github.com/mullerivan/DjangomultipleSchema
構想是用需要使用的schema和table來定義每個model
class Meta: db_table = u'"app1\".\"on_app_one"'
更新
OPTIONS
為'OPTIONS' : { 'options': '-c search_path=\"samples\"' },
我只是嘗試使用該語法,並且效果很好,並且沒有任何 StackExchange 答案中指定的其他語法對我有用。根據我的分析,這恰好是 PostgreSQL 版本 >= 9.2 的原因,我們可以在 Django 應用程序設置中在雙引號之間指定模式名稱,這樣 Django 應用程序就不會將模式名稱視為一些普通實體。