m6米乐安卓版下载-米乐app官网下载
5

pg-m6米乐安卓版下载

多米爸比 2022-01-20
1224

postgresql数据库使用pg_dump做导出时,我们比较常见下面的两种使用方式:

  • 仅导出结构
-s, --schema-only            dump only the schema, no data
  • 仅导出数据
-a, --data-only              dump only the data, not the schema

这两种方式的使用比较熟知,那其实section子项也能实现只导出数据或只导结构,并且导出结构分的更细。

本文将详细测试section子项的三种开关(pre-data, data, post-data),对比它与前两种方式的差异。

1.section子项解释

我们可以从官方文档查看pg_dump命令section子项的详细解释:

–section=sectionname
only dump the named section. the section name can be pre-data, data, or post-data. this option can be specified more than once to select multiple sections. the default is to dump all sections.

the data section contains actual table data, large-object contents, and sequence values. post-data items include definitions of indexes, triggers, rules, and constraints other than validated check constraints. pre-data items include all other data definition items.

上面第一段的描述是比较容易理解的,我们可以按section子项,按部分导出,也可以多次指定section子项,默认是导出所有的三个部分。

第二段描述section子项三种开关的具体功能:

  • pre-data section

这部分描述比较间接,包含post-data部分描述之外的其他数据定义项。

  • data section

这部分描述也比较清晰:包含表数据、大对象、序列值。

  • post-data section

这部分描述比较关键:包含索引、触发器、规则和约束(constraints other than validated check constraints)。

通过文档的字面理解,除了post-data section包含的constraints other than validated check constraints之外,其它的解释还是非常清晰的。

下面通过实验来进一步验证post-data section包含哪些约束:

2.结构准备

下面我们准备两个表,首先是t1表

create table t1(id bigserial primary key);
create index idx_t1_id on t1(id);
create rule rule_t1 as on delete 
    to t1 do nothing;
create function fun_tg() returns trigger as $$ 
declare
begin 
  -- do something
end; 
$$ language plpgsql;
create trigger tg_t1
    after update or insert or delete on t1
	for each row execute procedure fun_tg(); 

然后是persons表

create table persons(
id int  primary key,
name varchar unique,
age int constraint check_age check(age>=0 and age>150),
sex boolean not null,
pid int references t1(id)
);
create index idx_persons_age on persons(age);
create unique index idx_persons_pid on persons(pid);

可以看到我们构造了索引、触发器、规则和约束,其中约束包括非空约束、检查约束、唯一约束、主键和外键约束。

3.导出语句

  • schema-only
pg_dump --port=1208 \
--dbname=postgres \
--username=test \
--schema=test \
--schema-only \
--format=p \
--file=file1.sql 
  • pre-data
pg_dump --port=1208 \
--dbname=postgres \
--username=test \
--schema=test \
--section=pre-data \
--format=p \
--file=file2.sql 
  • post-data
pg_dump --port=1208 \
--dbname=postgres \
--username=test \
--schema=test \
--section=post-data \
--format=p \
--file=file3.sql 
  • pre-data and post-data
pg_dump --port=1208 \
--dbname=postgres \
--username=test \
--schema=test \
--section=pre-data \
--section=post-data \
--format=p \
--file=file4.sql 

4.结果分析

  • 对比file1.sql和file4.sql
diff file1.sql file4.sql

结果是一致的,schema-only与pre-data and post-data效果几乎是一样。

  • 查看file3.sql

使用下面的命令过滤头部信息及空行以及注释

cat file3.sql |grep -v "^set\|set_config\|^--\|^$"

命令执行结果如下

alter table only test.persons
    add constraint persons_name_key unique (name);
alter table only test.persons
    add constraint persons_pkey primary key (id);
alter table only test.t1
    add constraint t1_pkey primary key (id);
create index idx_persons_age on test.persons using btree (age);
create unique index idx_persons_pid on test.persons using btree (pid);
create index idx_t1_id on test.t1 using btree (id);
create rule rule_t1 as
    on delete to test.t1 do nothing;
create trigger tg_t1 after insert or delete or update on test.t1 for each row execute function test.fun_tg();
alter table only test.persons
    add constraint persons_pid_fkey foreign key (pid) references test.t1(id);

可以看到post-data导出包含索引、规则、触发器、唯一约束、主键、外键约束,不包含检查约束和非空约束。

  • 查看file2.sql

pre-data导出包含post-data部分描述之外的其他数据定义项。

5.结论

  • schema-only与pre-data结合post-data效果相同。
  • post-data导出结构包括索引、规则、触发器、唯一约束、主键、外键约束。这也是符合section子项的开关设计:pre-data进行数据预处理,包括基本的结构定义;然后是data数据处理,最后是post-data后处理。

section子项的post-data部分可用于对索引、规则、触发器的统一处理。

保持联系

从2019年12月开始写第一篇文章,分享的初心一直在坚持,本人现在组建了一个pg乐知乐享交流群,欢迎关注我文章的小伙伴进群吹牛唠嗑,交流技术,互赞文章。

如果群二维码失效可以加我微信。

最后修改时间:2022-10-23 10:35:06
「喜欢文章,快来给作者赞赏墨值吧」
【米乐app官网下载的版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

文章被以下合辑收录

评论

网站地图