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

时间:2016-02-01 13:55:37

标签: python django django-models multi-tenant django-south

如何使用django-tenant-schemas将数据从共享架构迁移到多租户架构?

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

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

django-tenant-schemas文档说明如下:

  

注意:如果这是您第一次,您的数据库应为空   运行此命令。

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

1 个答案:

答案 0 :(得分:0)

这样做有一个窍门。首先,您应该了解psql dump和load命令。

步骤:

  1. 您以前的django应用程序包含一个数据库,其中所有表均处于public模式。使用pgsql命令将其转储到pg_dump文件中。让我们说database.pgsql
  2. 编写一个shell脚本,该脚本首先将此转储加载到临时数据库,例如temp_db
  3. 由于要转储的模式是公共模式,因此将模式名称更改为首选模式,使其与您希望在租户模式实现的数据库中使用的模式相同,例如tenant_xyz
  4. 再次转储,这次是将模式tenant_xyztenant_xyz.pgsql
  5. tenant_xyz模式转储加载到租户模式实现的数据库中,假设postgres
  6. 现在,已加载转储的tenant_xyz的架构将在首选架构内的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