我今天使用postgres并遇到问题我以这种方式转储数据库
pg_dump zeus_development -U test > zeus_development.dump.out
Run Code Online (Sandbox Code Playgroud)
如果我想恢复到另一个数据库zeus_production怎么办?
我该怎么办?
Mat*_*sOl 22
简单,首先使用创建数据库template0作为你的模板数据库:
createdb -U test -T template0 zeus_production
Run Code Online (Sandbox Code Playgroud)
然后,在此数据库上恢复转储:
psql -U test zeus_production -f /path/to/zeus_development.dump.out
Run Code Online (Sandbox Code Playgroud)
在恢复时,始终使用template0显式,因为它始终是一个空的且不可修改的数据库.如果你不使用显式模板,PostgreSQL会假设template1,如果它有一些对象,比如你的转储数据库已有的表或函数,你将在恢复时遇到一些错误.
尽管如此,即使您使用相同的名称(zeus_development)恢复数据库,您也应该以相同的方式创建(或重新创建)它.除非你使用的-C选项,同时倾销(或-C中pg_restore如果使用的是二进制转储),我不建议,因为会给你少的灵活性(如恢复在不同的数据库名).
ped*_*edz 12
PostgresSQL文档影响了我使用自定义格式.我已经使用它多年了,它似乎有各种优点,但你的里程可能会有所不同.那就是说,这对我有用:
pg_restore --no-owner --dbname postgres --create ~/Desktop/pg_dump
psql --dbname postgres -c 'ALTER DATABASE foodog_production RENAME TO foodog_development'
Run Code Online (Sandbox Code Playgroud)
有没有foodog_development也不foodog_production序列之前,现有的数据库.
这将从dump(~/Desktop/pg_dump)恢复数据库,dump()将使用转储的名称创建它.重命名将DB命名为您想要的任何名称.
的--no-owner,如果你的用户名是在两台机器上同样可能不需要.在我的情况下,转储完成,user1恢复完成user2.新对象需要拥有user2并--no-owner实现这一目标.
小智 6
简单地执行以下操作不是更容易吗?
createdb -U test -T zeus_development zeus_production
Run Code Online (Sandbox Code Playgroud)
这在 dba.stackexchange 上有一个答案,我在这里复制:
让我们定义一些变量,以使其余的变量更容易复制/粘贴
old_db=my_old_database
new_db=new_database_name
db_dump_file=backups/my_old_database.dump
user=postgres
Run Code Online (Sandbox Code Playgroud)
以下假设您的备份是使用“自定义”格式创建的,如下所示:
pg_dump -U $user -F custom $old_db > "$db_dump_file"
Run Code Online (Sandbox Code Playgroud)
要恢复$db_dump_file到新的数据库名称$new_db:
dropdb -U $user --if-exists $new_db
createdb -U $user -T template0 $new_db
pg_restore -U $user -d $new_db "$db_dump_file"
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
21496 次 |
| 最近记录: |