2015-03-23 3 views
9

Sto provando a creare una tabella con una colonna di incremento automatico come di seguito. Poiché Redshift psql non supporta SERIAL, ho dovuto usare IDENTITY data type:Redshift psql incremento automatico sul numero pari

IDENTITÀ (sementi, step)
clausola che specifica che la colonna è una colonna IDENTITY. Una colonna IDENTITY contiene valori auto generati unici. Questi valori iniziano con il valore specificato come seed e incrementano il numero specificato come step. Il tipo di dati per una colonna IDENTITY deve essere o INT o BIGINT.`

la mia istruzione CREATE TABLE è simile al seguente:

CREATE TABLE my_table(
     id INT IDENTITY(1,1), 
     name CHARACTER VARYING(255) NOT NULL, 
     PRIMARY KEY(id) 
); 

Tuttavia, quando ho provato ad inserire i dati in my_table, righe incrementano solo sul numero pari, come di seguito:

id | name | 
----+------+ 
    2 | anna | 
    4 | tom | 
    6 | adam | 
    8 | bob | 
10 | rob | 

mie istruzioni iNSERT assomigliano di seguito:

INSERT INTO my_table (name) 
VALUES ('anna'), ('tom') , ('adam') , ('bob') , ('rob'); 

Ho anche problemi a riportare indietro la colonna id per iniziare con 1. Esistono soluzioni per il tipo di dati SERIAL, ma non ho visto alcuna documentazione per IDENTITY. Qualsiasi suggerimento sarebbe molto apprezzato!

+0

Strano. Ho provato il tuo codice e non vedo il problema. Gli ID sono 1-5. – Anthony

+0

Ho lo stesso problema durante il caricamento di un file csv da s3 a redshift. –

+3

Per la cronaca, ho lo stesso problema. Strano come non sia coerente. (Ho fatto IDENTITÀ (0,1) come ha detto Jorge di seguito, ma il secondo dovrebbe essere tutto ciò che conta Mi chiedo se sia un bug regionale? Io sono su noi-ovest-2 (Oregon) – Cognitio

risposta

0

Impostare il valore seed su 1 e il valore step su 1.

Crea una tabella

CREATE table my_table(
    id bigint identity(1, 1), 
    name varchar(100), 
    primary key(id)); 

Inserisci righe

INSERT INTO organization (name) 
VALUES ('anna'), ('tom') , ('adam'), ('bob'), ('rob'); 

Risultati

id | name | 
----+------+ 
    1 | anna | 
    2 | tom | 
    3 | adam | 
    4 | bob | 
    5 | rob | 

Per qualche ragione, se si imposta il valore seed su 0 e il tuo valore step su 1, quindi il numero intero aumenterà in incrementi di 2.

Crea una tabella

CREATE table my_table(
    id bigint identity(0, 1), 
    name varchar(100), 
    primary key(id)); 

inserire righe

INSERT INTO organization (name) 
VALUES ('anna'), ('tom') , ('adam'), ('bob'), ('rob'); 

Risultati

id | name | 
----+------+ 
    0 | anna | 
    2 | tom | 
    4 | adam | 
    6 | bob | 
    8 | rob |