use*_*534 41 sql postgresql heroku
由于我的postgres数据库在heroku(9.1)和我的本地安装(8.4)上的版本不兼容,我需要一个纯文本sql数据库转储文件,所以我可以将我的生产数据的副本放在我的本地测试环境中.
看来在heroku上我无法使用pg_dump进行转储,但只能这样做:
$ heroku pgbackups:capture
$ curl -o my_dump_file.dump `heroku pgbackups:url`
Run Code Online (Sandbox Code Playgroud)
......这给我的"自定义数据库的转储文件格式",而不是"纯文本格式",所以我不能够做到这一点:
$ psql -d my_local_database -f my_dump_file.sql
Run Code Online (Sandbox Code Playgroud)
Ale*_*lex 55
您可以直接从Heroku数据库创建自己的pg_dump.
首先,使用你的postgres字符串heroku config:get DATABASE_URL.
寻找Heroku Postgres网址(例如:) HEROKU_POSTGRESQL_RED_URL: postgres://user3123:passkja83kd8@ec2-117-21-174-214.compute-1.amazonaws.com:6212/db982398,格式为postgres://<username>:<password>@<host_name>:<port>/<dbname>.
接下来,在命令行上运行:
pg_dump --host=<host_name> --port=<port> --username=<username> --password --dbname=<dbname> > output.sql
Run Code Online (Sandbox Code Playgroud)
终端将询问您的密码然后运行它并将其转储到output.sql.
然后导入它:
psql -d my_local_database -f output.sql
Run Code Online (Sandbox Code Playgroud)
Lei*_*cki 26
Heroku的PGBackup 实际上在幕后使用了pg_dump,而"自定义格式"实际上是pg_dump的自定义格式(-Fc参数),而不是Heroku自己的自定义格式.
这意味着您可以使用pg_restorePostgres的一部分将Heroku备份直接恢复到另一个数据库中:
pg_restore -d mydatabase my_dump_file.dump
Run Code Online (Sandbox Code Playgroud)
此外,如果您pg_restore在未指定要还原的数据库的情况下调用,则会将SQL语句打印到标准输出,因此您可以将Heroku备份转换为SQL文件:
pg_restore my_dump_file.dump > sql_statements.sql
Run Code Online (Sandbox Code Playgroud)
tob*_*lty 19
假设您DATABASE_URL在环境中配置了一个更简单的方法:
heroku run 'pg_dump $DATABASE_URL' > my_database.sql
Run Code Online (Sandbox Code Playgroud)
这将pg_dump在您的容器中运行并将内容传递到本地文件my_database.sql.单引号很重要.如果使用双引号(或根本没有引号),DATABASE_URL将在本地而不是在容器中进行评估.
如果您的目的是将内容加载到本地数据库中,那么您也可以将其直接管道:
createdb myapp_devel # start with an empty database
heroku run 'pg_dump -xO $DATABASE_URL' | psql myapp_devel
Run Code Online (Sandbox Code Playgroud)
添加的-xO避免了倾销GRANT,REVOKE和ALTER OWNER语句,这可能并不适用于您的本地数据库服务器.如果您的任何COPY命令因错误而失败ERROR: literal carriage return found in data(我的确如此),请参阅此答案.
很可能这个问题在两年半前最初被问到这个问题时没有用,但是对于那些寻找方法来轻松获取Heroku Postgres数据库的人来说,这似乎是最简单的方法.今天.
小智 9
对于像我这样在 2020 年遇到这个问题的人:
heroku pg:backups:capture -a app-name
heroku pg:backups:download -a app-name
Run Code Online (Sandbox Code Playgroud)
该工具实际上会告诉捕获后使用什么命令。要从文件中获取 SQL latest.dump:
pg_restore -f sqldump.sql latest.dump
Run Code Online (Sandbox Code Playgroud)
就是这样。
| 归档时间: |
|
| 查看次数: |
15206 次 |
| 最近记录: |