The Parameter “-c” of Pg_restore

今天在bbs论坛上看到一个问题,有点意思,这里记录下;问题是这样的,想将 A库 的一部分表数据导入到 B库里, 而A库里的这部分表有些已经存在B库中,目标是在导入B库的过程中,先将B库已存在的表删除,再导入A库表。

后来查了下手册,发现 pg_resotre 有个 “-c” 参数可以达到这个目标,即在导入数据库对像之前先将已存在的对像删除掉。

pg_restore “-c” 选项

1
-c, --clean clean (drop) database objects before recreating

接下来做下实验,看看这个参数的效果:

创建测试表

1
2
3
4
5
6
7
8
9
10
11
12
13
skytf=> create table test_41 (id integer,name varchar(32));  
CREATE TABLE

skytf=> insert into test_41 values (1,'a'),(2,'b'),(3,'c');
INSERT 0 3

skytf=> select * from test_41;
id | name
----+------
1 | a
2 | b
3 | c
(3 rows)

备份表

1
pg_dump -E UTF8 -Fc -t "skytf.test_41" skytf > skytf.test_41.dmp

备份表后删除表数据

1
2
3
4
5
6
7
8
9
10
skytf=> delete from test_41 where id=3;  
DELETE 1
skytf=> delete from test_41 where id=2;
DELETE 1

skytf=> select * from test_41;
id | name
----+------
1 | a
(1 row)

使用 “-c” 选项还原表数据

1
2
3
4
5
6
7
8
[postgres@tf]$ pg_restore -U skytf -d skytf -c -v skytf.test_41.dmp  
pg_restore: connecting to database for restore
pg_restore: dropping TABLE DATA test_41
pg_restore: dropping TABLE test_41
pg_restore: creating TABLE test_41
pg_restore: restoring data for table "test_41"
pg_restore: setting owner and privileges for TABLE test_41
pg_restore: setting owner and privileges for TABLE DATA test_41

备注:从 pg_restore 日志看出,PG在导入表 test_41 之前,先将表 test_41 drop 掉,然后再创建表,再导表数据,表权限。

验证

1
2
3
4
5
6
7
skytf=> select * From test_41;  
id | name
----+------
1 | a
2 | b
3 | c
(3 rows)

备注:在导数据之前 test_41 只有一条记录,导数据后,表 test_41 数据已经为三条了。

总结

pg_restore 的 “-c” 参数在生产环境中很少用到,但在导库数据的某些场合提供了便利。

原创文章,作者:506227337,如若转载,请注明出处:https://blog.ytso.com/236404.html

(0)
上一篇 2022年1月24日
下一篇 2022年1月24日

相关推荐

发表回复

登录后才能评论