【发布时间】:2022-01-06 22:48:46
【问题描述】:
我经常需要将我的生产数据库复制到我的开发环境中。为此,我有一个 rake 任务,它从我的生产服务器中提取数据库,创建一个 .dump 文件,然后我从头开始重新创建我的开发数据库。
这是我的 rake 任务:
namespace :db do
desc 'Pull production db to development'
task :pull => [:dump, :restore]
task :dump do
dumpfile = "#{Rails.root}/tmp/latest.dump"
puts 'PG_DUMP on production database...'
production = Rails.application.config.database_configuration['production']
system "ssh root@my_prod_server 'postgres:export prod-db' > #{dumpfile}"
puts 'Done!'
end
task :restore do
dev = Rails.application.config.database_configuration['development']
dumpfile = "#{Rails.root}/tmp/latest.dump"
puts 'PG_RESTORE on development database...'
system "pg_restore --verbose --clean --no-acl --no-owner -h 127.0.0.1 -U #{dev['username']} -d #{dev['database']} #{dumpfile}"
puts 'Done!'
end
end
效果很好。
问题是,它开始变得越来越大,对于每一行我都有大量的jsonb 数据。目前我的 latest.dump 文件大约 700MB,需要大约 5 分钟才能执行。
是否有任何其他解决方案可以加快这个过程。这是否可以一次复制/粘贴整个数据库,而不是每次都从头开始重新创建每一行?
谢谢!
【问题讨论】:
-
为了更好地回答,我想知道你在用这个副本做什么。你能提供一些情况吗?
-
感谢@Schwern 的详细回答。当我需要重现错误或使用真实数据进行一些测试时,我会复制我的生产数据库。不适用于统计或报告。因此,正如您和 jjanes 所建议的,只读的追随者数据库对我来说非常有趣!不知道如何实现它,有任何参考吗?将来我也会考虑将我的 jsonb 数据转换为适当的列,但稍后。
-
是的,谢谢,我想我会在我的服务器上创建一个“副本”数据库,我可以在测试需要时连接到该数据库:)
标签: ruby-on-rails database postgresql database-backups