0

我在 Heroku 上有两个应用程序。一个是生产应用程序,另一个是临时应用程序。我在登台服务器上有一个新数据库。我需要复制一些表中包含的相关用户信息。我知道 pgbackups 插件,但它会复制整个数据库。我不想复制整个数据库,因为它太大了,而且大部分数据都不相关。

我只想要其中的一小部分,与用户帐户有关。有没有办法将生产数据库中的相关行复制到暂存数据库?我可以编写 Ruby on Rails 查询来获取信息,但似乎无法将其保存到另一个数据库。我需要采取哪些步骤来复制用户数据,或者是否有一些解决方法可以做同样的事情?

4

5 回答 5

0

我一直在使用 YamlDb 来保存数据库的状态。

使用以下命令安装它:

script/plugin install git://github.com/adamwiggins/yaml_db.git 

使用 rake 任务将 Rails 数据库的内容转储到 db/data.yml

rake db:data:dump

使用 rake 任务将 db/data.yml 的内容加载到数据库中

rake db:data:load

这是创作者主页:

http://blog.heroku.com/archives/2007/11/23/yamldb_for_databaseindependent_data_dumps/

于 2013-06-17T20:14:05.297 回答
0

dblink如果您需要在数据库之间复制某些数据部分,Postgres 扩展可能是一个不错的选择。你可以连接到你的目标数据库并运行类似的东西(注意:你可能需要阅读一些文档来弄清楚连接语法):

CREATE EXTENSION dblink;

INSERT INTO table
SELECT * FROM dblink('...', 'select name from table') AS remote(name text);
于 2013-06-17T20:32:22.193 回答
0

您可以使用您要导出的数据从生产应用程序向暂存应用程序发送特定请求,然后从那里将它们存储在暂存数据库中。

于 2013-06-17T20:09:05.260 回答
0

我最近发布了一个名为forceps的库,您可以使用它从不同的数据库中导入活动记录模型。

您需要做的第一件事是为生产数据库配置 Active Record 连接。Heroku 允许您使用以下命令获取 Postgres 数据库凭据:

heroku pg:credentials <production database name> --app <production app name>

使用这些凭据,您可以配置文件中命名的remote节点database.yml

remote:
  adapter: postgresql
  host: ...
  port: 5432
  username: ...
  password: ...
  database: ...
  encoding: utf8

现在您可以准备一个脚本,将生产环境中的内容复制到您正在处理的默认环境中。您可以在开发中测试此脚本,然后在登台时运行它。

例如,如果您想复制所有帐户,该脚本可能类似于:

Rails.application.eager_load! 
Forceps.configure

Forceps::Remote::Account.find_each do |remote_account|
    remote_account.copy_to_local
end

镊子让您配置要复制的对象。默认情况下,它将探索和复制所有关联的对象。这意味着它将所有关联数据复制到每个帐户,这可能不是您想要的。

此外,#copy_to_local您可以将远程类Forceps::Remote::<Model>用作任何其他活动记录模型,而不是使用。然后,您可以手动复制您需要的任何内容:

remote_account = Forceps::Remote::Account.find_by_email 'some@email.com'
local_account = Account.create!(email: remote_account.email)
于 2014-01-31T09:19:03.017 回答
0

我最近用我要传输的数据写了 json,并在另一端导入了它。

像:

File.open("users.json", "wb") do |f|
  f << User.where(condition: true).to_json
end

在另一个数据库上:

users_json = JSON.parse(File.read("users.json"))
users_json.each do |json|
  User.create json
end
于 2013-06-17T20:21:13.537 回答