如何将自动递增列添加到现有vertica表?

时间:2015-05-20 16:36:46

标签: sql vertica

我有一个目前具有以下结构的表

id, row1
(null), 232
(null), 4455
(null), 16

我希望id成为自动递增的主键,如下所示:

id, row1
1, 232
2, 4455
3, 16

我已经阅读了文档,看起来我需要的功能是AUTO_INCREMENT,我可以使用ALTER TABLE语句编辑表格。但是,我似乎无法正确理解语法。我该怎么做呢?是否可以使用预先存在的表格?

3 个答案:

答案 0 :(得分:1)

您需要更新以下的现有数据

UPDATE table
SET id = table2.id
FROM 
(
SELECT row1, RANK() OVER (ORDER BY val) as id
FROM t1;
) as table2
where table.primaryKey = table2.primaryKey

然后使用以下语法

更改表格
-- get the value to start sequence at
SELECT MAX(id) FROM t2;

-- create the sequence
CREATE SEQUENCE seq1 START 5;

-- syntax as of 6.1
-- modify the column to add next value for future rows
ALTER TABLE t2 ALTER COLUMN id SET DEFAULT NEXTVAL('seq1');

答案 1 :(得分:1)

您需要做的是以下内容: 创建新序列:

create table tab2 as select * from tab1 limit 0;

创建一个新表:

insert /*+ direct */ into tab2 
 select NEXTVAL('sequence_auto_increment'),row1 from tab1;

插入数据:

group1
  • 正如@Kermit提到的,在Vertica中执行此操作的最佳方法是重新创建表格(一次)而不是多次,使用直接提示,以便跳过 WOS 存储(快得多
  • 至于@Nazmul创建的列约束,我不会使用它Vertica不关心约束,你需要强迫他插入你想要的东西,默认约束不是这样。

答案 2 :(得分:0)

如果您想使用Auto_Increment功能,

1)将数据复制到临时表

2)使用自动增量

重新创建基表

3)将数据复制回其他列

如果您只想要输入数字,请参阅Nazmul的其他答案