1

我们有 2 个 Heroku 应用程序 - 第一个是生产应用程序,第二个是暂存应用程序。我想从生产应用程序的一个表中提取数据(它是包含所有用户数据的表用户)并将其推送到临时数据库。

经过一番研究,我发现了一个名为pgbackups的插件——我有几个问题:这个插件是否也允许只从一个表中获取数据,而不是从整个数据库中获取数据?

第二件事是 - 假设在生产中是 ID 从1300的用户。在暂存版本用户的 ID 从110。如何将这 300 个用户从生产版本转移到暂存版本,这 300 个用户将从 ID 11开始计算(我们也希望将我们的暂存用户保留在暂存数据库中)。

谢谢

4

3 回答 3

1

该脚本将数据从 Heroku 数据库中提取到本地 postgres 数据库中。您需要pgbackups安装插件。从 Heroku 应用程序的根目录执行它。

#!/bin/bash -ex
# This script asks Heroku to backup the current production data, then downloads that dump and imports it into the local db.
# It is at least 3 times quicker than heroku db:pull, and we can only do it because we are dumping from postgres to postgres.
heroku pgbackups:capture --expire
curl -o tmp/latest.dump `heroku pgbackups:url`
pg_restore --verbose --clean --no-acl --no-owner -d your_db_name tmp/latest.dump
于 2013-07-22T05:16:17.050 回答
1

有一些方法可以在直接 SQL 中做到这一点。如果您对此感到满意,那就去吧。这种方式适用于熟悉 Rails 的开发人员——因此我们使用 JSON 提取数据,并使用该 JSON 在新数据库中创建具有新 ID 的用户。


由于您只提取 1 个表,并且您想将 ID 重置为新数据库,因此我建议:

  1. 使用 pbackups 将数据库副本带到本地
  2. File.open('yourfile.json', 'wb') {|file| file << User.all.to_json }
  3. 连接到您的新数据库,然后将 yourfile.json 移到那里

然后:

users_json = JSON.parse(File.read('yourfile.json'))
users_json.each do |json|
  json.delete("id")
  User.create(json)
end
于 2013-07-21T12:54:12.690 回答
0

您可以在此线程中查看我的答案。您可以使用名为forceps的库来完全按照您的要求进行操作。

于 2014-01-31T13:27:50.170 回答