我需要为两个不同的应用合并两个数据库。如何为所有Django表添加前缀以避免任何冲突?
例如,选项应如下所示:
DB_PREFIX = 'my_prefix_'
答案 0 :(得分:1)
您可以将meta选项用于模型,
class ModelHere():
class Meta:
db_table = "tablenamehere"
修改强>
如果您想为所有表添加前缀,包括auth_user,auth_group等。那么您正在寻找类似django-table-prefix的内容。只需安装并添加一些设置到设置文件即可。
'table_prefix',
添加到已安装的应用DB_PREFIX = 'nifty_prefix'
然后运行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