我发现了许多类似的问题 - 甚至添加了one similar non-dup的答案。但我无法看到或解决这个问题。这是核心问题:
我在Heroku上有一个临时服务器。我想将登台服务器数据库复制到Nitrous上的开发来解决问题。 Nitrous有Postgres 9,2,4,而Heroku有Postgres 9.3.3。
我的老板正在度假,我无权将Heroku登台服务升级为付费计划,我可以在其中进行分叉(然后使用分叉的Heroku数据库作为远程数据库进行开发)。
在早期的工作中,我使用heroku pg:push
将开发数据库发送到暂存。没问题。但我无法使用heroku pg:pull
- 它失败了,说:
pg_dump: server version: 9.3.3; pg_dump version: 9.2.4
pg_dump: aborting because of server version mismatch
我尝试了rake db:structure:dump
- 由于版本不匹配原因而失败。我隐约希望这会使用pg gem并且神奇地工作,忽略转速水平。嘿,如果你无知,魔术确实有效。
我有一个用于开发的Nitrous盒子,因为办公室防火墙阻止了,除了25,80和443之外几乎所有东西。所有有用的端口如22,5432,3000等都被阻止了。所以我在Nitrous上发展。它非常整洁。但是我从未想过Nitrous会有旧版本的Postgres,而且没有明显的方法来更新它。特别是鉴于Nitrous经常强调使用Heroku。
我尝试过使用更基本的命令:
pg_dump -h ec2-XX-XXX-XX-XXX.compute-1.amazonaws.com -p 5432 -Fc --no-acl --no-owner --compress 3 -o -U ${DBNAME} > dumpfile.gz
但是失败了(heroku pg:pull
可能会在引擎盖下使用此命令)出于同样的原因 - 版本不匹配。
我意识到,如果我在开始时知道更多,我可以要求Heroku使用9.2。但我现在有一个9.3.3实例中的数据,如果我只有一台时间机器,我想要那些数据,而不是我想要的数据,我可以应对trousers of time paradoxes。 / p>
可能的解决方案?是否有另一个具有PG 9.3的Web IDE?是否有一个我无法找到的标志让PG Dump 9.2与up-rev DB一起工作?有没有办法将Nitrous升级到9.3?至少对于关键的pg_dump命令?
基于浏览器的IDE版本的Postgres(截至2014/08/13):
答案 0 :(得分:0)
我花了几个小时来制定一个解决方案,使用不同的基于浏览器的IDE。 Cloud9提供Postgres 9.3,预安装在新VM中。
您需要向Heroku注册Cloud9 ID(在Cloud9控制台中找到SSH密钥,然后粘贴到Heroku中的ID SSH密钥中)。您需要从Cloud 9登录Heroku。
然后在Cloud9上使用pg_dump
和pg_restore
,使用Heroku数据库作为源和目标。
pg_dump -h ec2-XX-XX-XX-XX.compute.amazonaws.com -p 5432 --no-owner --no-acl -Fc -o -U ${HEROKU_STAGING_DATABASE_USER} ${HEROKU_STAGING_DATABASE_NAME} > staging.dump
pg_restore -h ec2-XX-XX-XX-XX.compute.amazonaws.com -p 5432 --no-owner --no-acl --clean --verbose -d ${HEROKU_DEV_DATABASE_NAME} -U ${HEROKU_DEV_DATABASE_USER} < staging.dump
在您的开发环境中,请确保更新config / database.yaml(或您的Web应用程序需要的任何内容)以使用Heroku远程数据库服务。
Simples。最终
答案 1 :(得分:0)
我遇到了这个问题,然后用盲法魔法解决了
recent.dump
文件按照此处的说明操作: https://stackoverflow.com/a/11391586/3850418
pg_restore -O -d MY_APPNAME_DEV recent.dump
我收到了一些警告,但它似乎有效,至少足以满足我的开发/测试目的。