您的位置:首页 > 其它

vertica-cascade危险操作

2016-06-17 10:30 441 查看
实验证明:

drop table tmp.zhuga;

create schema zhuga;

create sequence zhuga.test_seq;

create table tmp.zhuga(name varchar(10),id int default nextval('zhuga.test_seq'));

insert into tmp.zhuga values('fafa','1');

创建一个seq,然后改变上面不同schema下的sequence,让其在同一个schema下
create sequence tmp.test2_seq;

ALTER TABLE tmp.zhuga ALTER COLUMN id SET DEFAULT nextval('tmp.test2_seq');

删除原来错误的,zhuga schema
drop schema zhuga ;



我们强制删除
drop schema zhuga cascade;
查看tmp.zhuga,奇怪的事情发生了,和zhuga schema不相关的表居然因为依赖被删除
select * from tmp.zhuga ;



select nextval('zhuga.test_seq') ;
zhuga schema下的sequence也被删除
select nextval('tmp.test2_seq');
只有tmp下的schema没有被删除
再看

create schema zhuga1;

create table zhuga1.zhuga(name varchar(10));
insert into zhuga1.zhuga values('fafa');
select * from zhuga1.zhuga;

alter table zhuga1.zhuga set schema tmp;
select * from tmp.zhuga ;

drop schema zhuga1 cascade;
select * from tmp.zhuga ;

总结:cascade删除schema的时候,尤其涉及到sequence。内部机制是前面的数据在vertica内核中记录了zhuga.test_seq的数据信息,在我们改表的默认sequence(tmp.test2_seq)时候,里面的数据记录的还是以前的zhuga.test_seq并没有更改,然后cascade会将所有记录以前zhuga信息的数据删除,甚至包括表结构,下面实验可以看看,就连新产生的数据记录的新tmp.test2_seq都会被删除(是数据加表结构全部被删)

create schema zhuga;

create sequence zhuga.test_seq;

create table tmp.zhuga(name varchar(10),id int default nextval('zhuga.test_seq'));

insert into tmp.zhuga values('fafa','1');
select * from tmp.zhuga ;



这时数据记录的是zhuga.test_seq的sequence信息
create sequence tmp.test2_seq;

ALTER TABLE tmp.zhuga ALTER COLUMN id SET DEFAULT nextval('tmp.test2_seq');

insert into tmp.zhuga(name) values('fafa');
select * from tmp.zhuga ;



这时数据记录了zhuga.test_seq和tmp.test2_seq的信息
drop schema zhuga cascade;
select * from tmp.zhuga ;



全部被删,就连表结构都不剩
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: