2011-12-30 31 views
7

Giả sử tôi có một lược đồ có tên "my_schema", làm cách nào tôi có thể tạo các bảng có "django syncdb" cho lược đồ cụ thể đó? Hoặc là có bất kỳ lựa chọn thay thế khác để nhanh chóng tạo bảng từ mô hình django của tôi? Tôi nghĩ, theo mặc định django tạo ra các bảng cho lược đồ "công khai".Làm thế nào để xác định tên lược đồ trong khi chạy "syncdb" trong django?

+0

Bạn đang nói về tùy chọn ** - cơ sở dữ liệu = DATABASE **: * Chỉ định một cơ sở dữ liệu để đồng bộ hóa. Mặc định là cơ sở dữ liệu "mặc định". * – jpic

+0

No. Tôi đang đề cập đến lược đồ. http://www.postgresql.org/docs/9.0/static/ddl-schemas.html .Bằng mặc định django sử dụng lược đồ có tên "công khai" –

+1

Django không sử dụng lược đồ 'công khai' theo mặc định. Psycopg2 sử dụng lược đồ 'công khai' theo mặc định (vâng tôi đã đọc mã với grep). Bạn có thể thử đặt 'OPTIONS': {'schema': 'yourschema'} trong định nghĩa DATABASE của bạn (ở cùng cấp độ 'USER', 'HOST', v.v.). – jpic

Trả lời

5

Trước tiên, bạn phải có psycopg2> = 2.4.3 [1]. Nếu bạn có thì bạn có thể thêm schema để OPTIONS trong từ điển dựa trên cơ sở dữ liệu cấu hình, như thế này:

DATABASES = { 
    'default': { 
    'ENGINE': 'django.db.backends.postgresql_psycopg2', 
    # ... 
    'OPTIONS': { 
     'options': '-c search_path=my_schema' 
    } 
    } 
} 

Thử nghiệm trên postgresql 8.4 và django 1,3

  1. http://initd.org/psycopg/docs/module.html?highlight=connect#psycopg2.connect
  2. http://www.postgresql.org/docs/8.4/static/libpq-connect.html#LIBPQ-CONNECT-OPTIONS
0

Tôi đã sử dụng thông tin sau và làm việc cho tôi

'mặc định': { 'ENGINE': 'django.db.backends.postgresql_psycopg2', 'NAME': 'dab_name', 'USER': 'username', 'PASSWORD': 'mật khẩu', ' HOST ': 'localhost', 'PORT': '5432', 'Options': { 'tùy chọn': 'search_path -c = tour' tên #schema }}

Thử nghiệm trên postgresql 9 và django 1.10.2

Cảm ơn @romke

Các vấn đề liên quan