今天在bbs论坛上看到一个问题,有点意思,这里记录下;问题是这样的,想将 A库 的一部分表数据导入到 B库里, 而A库里的这部分表有些已经存在B库中,目标是在导入B库的过程中,先将B库已存在的表删除,再导入A库表。
后来查了下手册,发现 pg_resotre
有个 “-c” 参数可以达到这个目标,即在导入数据库对像之前先将已存在的对像删除掉。
pg_restore “-c” 选项
1 |
-c, --clean clean (drop) database objects before recreating |
接下来做下实验,看看这个参数的效果:
创建测试表
1 |
create table test_41 (id integer,name varchar(32)); |
备份表
1 |
pg_dump -E UTF8 -Fc -t "skytf.test_41" skytf > skytf.test_41.dmp |
备份表后删除表数据
1 |
skytf=> delete from test_41 where id=3; |
使用 “-c” 选项还原表数据
1 |
[postgres@tf]$ pg_restore -U skytf -d skytf -c -v skytf.test_41.dmp |
备注:从 pg_restore 日志看出,PG在导入表 test_41 之前,先将表 test_41 drop 掉,然后再创建表,再导表数据,表权限。
验证
1 |
skytf=> select * From test_41; |
备注:在导数据之前 test_41 只有一条记录,导数据后,表 test_41 数据已经为三条了。
总结
pg_restore
的 “-c” 参数在生产环境中很少用到,但在导库数据的某些场合提供了便利。
原创文章,作者:506227337,如若转载,请注明出处:https://blog.ytso.com/236404.html