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 ;
全部被删,就连表结构都不剩
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 ;
全部被删,就连表结构都不剩
相关文章推荐
- 微信接口调用
- Ubuntu 下常用软件的安装
- Android : 颜色设置的几种方法
- BZOJ NOI十连测第二场
- 新标日使用的语法体系
- aerospike的安装
- 开发阶段的环境部署总结
- Mtrace
- 什么是表压?什么是绝压?表压和绝压什么关系?
- Gradle 打包到本地maven库
- 队列----循环队列的实现
- 想比较传统消息系统,kafka可以很好的保证有序性~
- 360查出 HEUR/Malware.QVMxx.Gen 病毒含义
- jsp中插入时间控件
- Linux的GCC基本用法
- js基于setTimeout与setInterval实现多线程
- VBS文件运行
- 阅读 图解HTTP ,读书笔记
- Leetcode 337. House Robber III
- Python 面试题 - 堆排序 & 演算过程