我正在为不同的俱乐部创建一个多租户rails应用程序。我正在使用公寓宝石,因此它为每个俱乐部创建了不同的数据库,其中有超过100个桌子。现在我想转储一个租户并将其导入其他俱乐部租户
答案 0 :(得分:0)
Apartment gem为不同的tenenats而不是数据库创建不同的模式。您可以查看差异here。
对于您的情况,您可以使用以下命令复制一个模式的记录:
pg_dump -U <username> -p <port> -n <source> <database name> >> <dump filename>
source
是源的架构名称。它是您要复制的主要租户。
target
是您想要复制所有记录的架构。
通过在任何编辑器中打开来更改新转储文件中的架构名称。
# edit the dump.file
CREATE SCHEMA <source>; => CREATE SCHEMA <target>;
ALTER SCHEMA <source> OWNER TO <username>; => ALTER SCHEMA <target> OWNER TO <username>;
现在恢复新的转储文件。
psql -U <username> -p <port> -d <database> -f <dump filename>
您可以通过创建佣金任务并切换租户,将数据从一个租户复制到另一个租户。
Apartment::Tenant.switch!("one tenant")
# Retrive data that you want in a local object
# local_object = Model.all
Apartment::Tenant.switch!("second tenant")
# Save all data in second tenant from local_oject
# local_oject.each do |object|
# object.save
# end
答案 1 :(得分:0)
using this way but not saving in new tenant
Apartment::Tenant.switch("tenant1")
members= Member.all
Apartment::Tenant.switch("tenant2")
members.each do |member|
begin
member.save
puts "migrating member.id"
rescue=>e
puts e
end
end