我正在尝试创建一个带有自动增量列的表,如下所示。由于Redshift psql不支持SERIAL,我不得不使用IDENTITY data type:
IDENTITY(种子,步骤)
指定该列是IDENTITY列的子句。 IDENTITY列包含唯一的自动生成值。这些值以指定为seed的值开始,并以指定为step的数字递增。 IDENTITY列的数据类型必须是INT或BIGINT。
我的create table语句如下所示:
CREATE TABLE my_table(
id INT IDENTITY(1,1),
name CHARACTER VARYING(255) NOT NULL,
PRIMARY KEY( id )
);
但是,当我尝试将数据插入my_table
时,行只会在偶数上增加,如下所示:
id | name |
----+------+
2 | anna |
4 | tom |
6 | adam |
8 | bob |
10 | rob |
我的插入语句如下所示:
INSERT INTO my_table ( name )
VALUES ( 'anna' ), ('tom') , ('adam') , ('bob') , ('rob' );
我也很难将id列重新开始1.有SERIAL
数据类型的解决方案,但我还没有看到IDENTITY
的任何文档。
任何建议将不胜感激!
答案 0 :(得分:8)
您必须按如下方式设置您的身份:
id INT IDENTITY(0,1)
来源:http://docs.aws.amazon.com/redshift/latest/dg/r_CREATE_TABLE_examples.html
并且您无法将ID重置为0.您必须删除该表并再次创建它。
答案 1 :(得分:2)
将seed
值设为1
,将step
值设为1
。
创建表格
CREATE table my_table(
id bigint identity(1, 1),
name varchar(100),
primary key(id));
插入行
INSERT INTO organization ( name )
VALUES ('anna'), ('tom') , ('adam'), ('bob'), ('rob');
<强>结果
id | name |
----+------+
1 | anna |
2 | tom |
3 | adam |
4 | bob |
5 | rob |
出于某种原因,如果您将seed
值设置为0
而将step
值设置为1
,那么整数将以2
的步长增加
创建表格
CREATE table my_table(
id bigint identity(0, 1),
name varchar(100),
primary key(id));
插入行
INSERT INTO organization ( name )
VALUES ('anna'), ('tom') , ('adam'), ('bob'), ('rob');
<强>结果
id | name |
----+------+
0 | anna |
2 | tom |
4 | adam |
6 | bob |
8 | rob |