Postgresql

Django postgres 多模式

  • October 31, 2021

我正在嘗試為現有的 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 應用程序就不會將模式名稱視為一些普通實體。

引用自:https://dba.stackexchange.com/questions/208826