如何使用Postgres备份/恢复Rails数据库?

23

我在我的服务器上进行以下操作:

 pg_dump -O -c register_production > register.sql

然后,将 register.sql 复制到我的本地环境后,我尝试运行:

 psql register_development < register.sql

这似乎可以工作,但当我尝试在本地启动Rails站点时,出现了以下情况:

 PG::UndefinedTable: ERROR:  relation "list_items" does not exist at character 28

我如何将服务器数据库中的所有内容(包括关系)恢复到我的本地开发数据库中?


当前参考文献:http://www.postgresql.org/docs/9.3/static/backup.html | http://www.postgresql.org/docs/9.3/static/app-pgdump.html - odigity
2个回答

72

我使用这个命令来保存我的数据库:

pg_dump -F c -v -U postgres -h localhost <database_name> -f /tmp/<filename>.psql

并使用此命令进行恢复:

pg_restore -c -C -F c -v -U postgres /tmp/<filename>.psql

这将以Postgres的自定义格式(-F c)转储数据库,该格式默认为压缩格式并允许重新排序其内容。在您的情况下,-C -c将删除已存在的数据库,然后重新创建它,非常有用。而-v则指定详细模式,因此您可以在进行此操作时精确地看到正在发生的情况。


2
问题在于pg_restore将数据库register_production还原,而我想要将数据还原到我本地机器上的register_development。 - croceldon
你好!我在使用这个命令时遇到了问题。我收到了以下错误信息:pg_dump: [archiver (db)] query failed: ERROR: permission denied for relation schema_migrations。可能是什么问题呢?谢谢! - user3304086
1
抱歉打扰了。我一直在按照您上面的命令尝试恢复数据库。看起来它正在工作,因为我看到了许多命令。但是当我进去查看时,没有任何数据被复制。有什么想法吗? - Al D
4
我遇到了与AI D相同的问题,即pg_restore命令仅将内容转储到标准输出。我通过在pg_restore命令中添加“-d<database_name>”来解决这个问题。 - TomDavies
1
我无法在我的tmp文件夹中找到这个psql文件。它会生成在哪里? - Jai Chauhan
显示剩余5条评论

1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接