Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/342.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python django租户模式:将数据从共享模式迁移到多租户模式_Python_Django_Django Models_Multi Tenant_Django South - Fatal编程技术网

Python django租户模式:将数据从共享模式迁移到多租户模式

Python django租户模式:将数据从共享模式迁移到多租户模式,python,django,django-models,multi-tenant,django-south,Python,Django,Django Models,Multi Tenant,Django South,如何使用django租户模式将数据从共享模式迁移到多租户模式 我们有一个saas,最初没有使用django租户模式,而是使用共享数据库、共享模式方法。我们现在发现了django租户模式,并认为这是正确的方法 现在的问题是如何将数据从单个public模式迁移到独立的租户模式 django租户模式文档说明如下: 注意:如果这是您第一次访问数据库,则数据库应为空 正在运行此命令 在我现有的应用程序中,我有一个租户表,所有其他模型都有ForeignKey,但所有内容都在公共模式中。我使用south迁移。

如何使用django租户模式将数据从共享模式迁移到多租户模式

我们有一个saas,最初没有使用django租户模式,而是使用共享数据库、共享模式方法。我们现在发现了django租户模式,并认为这是正确的方法

现在的问题是如何将数据从单个
public
模式迁移到独立的租户模式

django租户模式
文档说明如下:

注意:如果这是您第一次访问数据库,则数据库应为空 正在运行此命令


在我现有的应用程序中,我有一个租户表,所有其他模型都有ForeignKey,但所有内容都在公共模式中。我使用
south
迁移。现在,我需要将所有这些租户数据迁移到单独的模式。如何做到这一点

这样做有一个诀窍。首先,您应该了解psql转储和加载命令

步骤:

  • 您以前的django应用程序由一个数据库组成,所有表都位于
    public
    schema中。使用
    pg_dump
    命令将其转储到
    pgsql
    文件。比如说
    database.pgsql
  • 编写一个shell脚本,首先将此转储加载到临时数据库,比如说
    temp\u db
  • 由于它将转储到的模式是公共模式,请将模式名称更改为首选模式,改为您希望位于租户模式实现的数据库中的模式,例如
    tenant\u xyz
  • 再次转储,这次将架构
    tenant_xyz
    转储到
    tenant_xyz.pgsql
  • tenant_xyz
    模式转储加载到租户模式实现的数据库,比如
    postgres
  • 现在,在首选模式内的
    postgres
    数据库中可以使用已加载转储的租户的模式
  • 脚本如下所示:

    psql -U postgres -c "DROP DATABASE IF EXISTS temp_db"
    psql -U postgres -c "CREATE DATABASE temp_db"
    psql -U postgres temp_db < database.pgsql
    psql -U postgres -d temp_db -c "ALTER SCHEMA public RENAME TO teanat_xyz"
    pg_dump -U postgres -d temp_db -n tenant_xyz > tenant_xyz.pgsql
    psql -U postgres -c "DROP DATABASE temp_db"
    psql -U postgres -c "DROP SCHEMA IF EXISTS tenant_xyz CASCADE"
    psql -U postgres postgres < tenant_xyz.pgsql
    
    psql-U postgres-c“如果存在临时数据库,则删除数据库”
    psql-U postgres-c“创建数据库临时数据库”
    psql-U postgres temp_dbtenant_xyz.pgsql
    psql-U postgres-c“删除数据库临时数据库”
    psql-U postgres-c“如果存在租户xyz级联,则删除架构”
    psql-U postgres postgres
    您找到了这样做的方法吗?