【问题标题】:Heroku db:push not copying database correctlyHeroku db:推送未正确复制数据库
【发布时间】:2023-04-06 14:27:01
【问题描述】:

我正在尝试使用heroku db:push 将我的本地 postgresql 数据库上传到 Heroku 提供的 5Mb 共享数据库。一切正常,但数据库没有反映我在本地数据库上的内容。一些记录被重复,而另一些则丢失了。因此,如果我在本地数据库中有三条记录:

cat, dog, banana

当我使用 db:push 时,我最终得到:

dog, dog, cat

我的数据库有大约 100,000 条记录,总共 3-4 MB。知道如何解决这个问题吗?

我的数据库.yml:

发展:

adapter: postgresql
encoding: unicode
database: myDB
username: myUname
password: myPw
host: localhost
port: 5432
reconnect: true

生产:

adapter: postgresql
encoding: unicode
database: myDBname
username: myUname
password: myPW
host: ec2-23-21-140-215.compute-1.amazonaws.com

我从

获取的所有这些数据库信息
heroku config

它给出了一个包含主机、用户名等的数据库 URL。

【问题讨论】:

  • 在不透露任何敏感信息的情况下,您能显示您的 database.yml 配置文件中的内容吗?
  • 您可能必须指定要推送到生产环境的本地数据库(即 heroku db:push sqlite://local.db)
  • 您正在运行哪个 Ruby?我在 Ruby 1.9.3 上遇到了 db:push 的问题,但回到 1.9.2 解决了它。
  • 是的,我正在使用 1.9.3,我想这可能与它有关,我会尝试降到 1.9.2
  • 与 ruby​​ 版本 1.9.2p290 相同。

标签: ruby-on-rails postgresql heroku


【解决方案1】:

虽然方便,但使用 tap(db:push 使用的)可能无法准确复制您的数据,并且可能会在较大的传输中遇到错误。要从您的生产系统导入或导出数据,我们强烈建议使用 pgbackups。

https://devcenter.heroku.com/articles/import-data-heroku-postgres#from_postgres

https://devcenter.heroku.com/articles/pgbackups#importing_from_a_backup

【讨论】:

  • 这很好,谢谢!我刚刚为 heroku 安装了 pgbackup 插件,在 pgadmin 中创建了我的数据库的 .dump 并将文件上传到 amazon S3。然后我只使用了 pgbackups:restore 和 amazon s3 URL 和 db 复制得很好。这两个链接都概述了您必须做得很好。您可能不得不弄乱 amazon s3 权限。
【解决方案2】:

推送本质上是替换已经存在的表的数据副本(它不会触及不属于推送的表)。

我不确定您为什么会遇到问题,但您可以重置数据库并推送以获取所需内容的干净副本:

heroku pg:reset
heroku db:push

【讨论】:

  • 试过了,没用。奇怪的是坏副本总是不同的。有一次它丢失了前 20 条记录,再试一次,那些记录在那里,中间的 100 条记录消失了。
猜你喜欢
  • 2018-02-25
  • 2013-05-20
  • 2016-11-05
  • 2011-11-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-07-04
  • 1970-01-01
相关资源
最近更新 更多