abu*_*ker 55 postgresql pg-dump pg-restore
我temp1使用follwing命令转储了一个名为的数据库
$ pg_dump -i -h localhost -U postgres -F c -b -v -f pub.backup temp1
Run Code Online (Sandbox Code Playgroud)
现在我想在另一个名为"db_temp"的数据库中恢复转储,但是我只是希望所有表都应该在"temp_schema"(而不是fms temp1数据库中的默认模式)中创建"db_temp"数据库.
有没有办法用pg_restore命令做到这一点?
任何其他方法也不胜感激!
小智 58
有一个简单的解决方案:
--format=p或-F p)
create schema myschema;
SET search_path TO myschema;
现在,您可以使用该命令恢复备份转储
psql -f pub.backup.sql
该set search_path to <schema>命令将myschema设置为默认值,以便在此模式中创建新表和其他对象,而不管它们之前存在的"默认"模式.
sha*_*unc 47
快速而肮脏的方式:
1)重命名默认架构:
alter schema public rename to public_save;
Run Code Online (Sandbox Code Playgroud)
2)创建新模式作为默认模式:
create schema public;
Run Code Online (Sandbox Code Playgroud)
3)恢复数据
pg_restore -f pub.backup db_temp [and whatever other options]
Run Code Online (Sandbox Code Playgroud)
4)根据需要重命名模式:
alter schema public rename to temp_schema;
alter schema public_save rename to public;
Run Code Online (Sandbox Code Playgroud)
Mag*_*der 12
pg_restore本身没办法.你可以做的是使用pg_restore生成SQL输出,然后通过例如sed脚本发送它来更改它.您需要注意如何编写该sed脚本,因此它不匹配并更改数据中的内容.
Ham*_*ish 10
可能最简单的方法是在恢复后简单地重命名模式,即使用以下SQL:
ALTER SCHEMA my_schema RENAME TO temp_schema
Run Code Online (Sandbox Code Playgroud)
我相信,因为您使用压缩归档格式输出pg_dump,所以在恢复之前无法改变它.选项是使用默认输出并对模式名称进行搜索和替换,但这样做会有风险,如果不小心可能会导致数据损坏.
| 归档时间: |
|
| 查看次数: |
50148 次 |
| 最近记录: |