Redshift psql自动增加偶数

时间:2015-03-23 21:41:40

标签: sql amazon-redshift

我正在尝试创建一个带有自动增量列的表,如下所示。由于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的任何文档。 任何建议将不胜感激!

2 个答案:

答案 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  |