Django数据库前缀

时间:2015-08-21 12:16:47

标签: django postgresql

我需要为两个不同的应用合并两个数据库。如何为所有Django表添加前缀以避免任何冲突?

例如,选项应如下所示:

DB_PREFIX = 'my_prefix_'

2 个答案:

答案 0 :(得分:1)

您可以将meta选项用于模型,

class ModelHere():
      class Meta:
          db_table = "tablenamehere"

修改

如果您想为所有表添加前缀,包括auth_user,auth_group等。那么您正在寻找类似django-table-prefix的内容。只需安装并添加一些设置到设置文件即可。

  1. 'table_prefix',添加到已安装的应用
  2. 将表格前缀设置为DB_PREFIX = 'nifty_prefix'
  3. 然后运行syncdb,输出将是,

    Creating tables ...
    Creating table nifty_prefix_auth_permission
    Creating table nifty_prefix_auth_group_permissions
    Creating table nifty_prefix_auth_group
    Creating table nifty_prefix_auth_user_groups
    Creating table nifty_prefix_auth_user_user_permissions
    Creating table nifty_prefix_auth_user
    Creating table nifty_prefix_django_content_type
    Creating table nifty_prefix_django_session
    Creating table nifty_prefix_django_site
    

答案 1 :(得分:1)

为所有名称添加前缀的替代方法是将两个DB中的一个放入不同的模式中  (多个模式可以在同一个数据库中共存,即使这些对象具有相同的名称)这也将处理除表之外的对象,例如索引,视图,函数等......

所以在其中一个数据库上,只需做

ALTER SCHEMA public RENAME TO myname;

之后,您可以将其转储(pg_dump -n myname以仅转储一个模式),并将其导入另一个数据库,而不会发生冲突。

您可以通过myname.tablname或通过设置search_path来引用新架构中的表或其他对象(这可以基于每个用户进行,例如通过ALTER USER SET search_path = myschema, pg_catalog;

注意:框架和客户端可能存在架构感知的问题,因此您可能需要进行一些额外的调整。因人而异。

http://www.postgresql.org/docs/9.4/static/sql-alterschema.html