2015-03-23 7 views
9

Ich versuche, eine Tabelle mit einer Auto-Inkrement-Spalte wie folgt zu erstellen. Da Rotverschiebung psql SERIAL nicht unterstützt, musste ich IDENTITY data type verwenden:Redshift psql auto Inkrement auf gerade Zahl

IDENTITY (Samen, Stufe)
Klausel, die die Spalte gibt an, dass eine Identitätsspalte ist. Eine IDENTITY-Spalte enthält eindeutige automatisch generierte Werte. Diese Werte beginnen mit dem als Startwert angegebenen Wert und werden um die als Schritt angegebene Anzahl erhöht. Der Datentyp für eine Identity-Spalte muss entweder INT oder BIGINT.`

Anweisung create table Mein sieht wie folgt aus:

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

Allerdings, wenn ich versucht, Daten in my_table einfügen, Zeilen erhöhen nur auf die gerade Zahl, wie unten:

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

Meine Insert-Anweisungen aussehen wie unten:

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

Ich habe auch Probleme mit dem Zurückbringen der ID-Spalte, um mit 1 zu beginnen. Es gibt Lösungen für SERIAL Datentyp, aber ich habe keine Dokumentation für IDENTITY gesehen. Alle Vorschläge würden sehr geschätzt werden!

+0

Schräge. Ich habe Ihren Code ausprobiert und sehe das Problem nicht. Die IDs sind 1-5. – Anthony

+0

Ich habe das gleiche Problem beim Laden einer CSV-Datei von S3 auf Rotverschiebung. –

+3

Für die Aufzeichnung habe ich das gleiche Problem. Seltsam, wie es nicht konsistent ist. (Ich habe IDENTITY (0,1) wie der Jorge sagte unten, aber die zweite 1 sein sollte alles, was zählt. Ich frage mich, ob es eine regionale Bug? Ich bin auf uns-West-2 (Oregon) – Cognitio

Antwort

0

Setzen Sie Ihren seed Wert auf 1 und Ihren step Wert auf 1.

Tabelle erstellen

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

Zeilen einfügen

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

Ergebnisse

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

Aus irgendeinem Grund, wenn Sie Setzen Sie Ihren seed Wert auf 0 und Ihren step Wert auf 1, dann wird die ganze Zahl in Schritten von 2 erhöht.

erstellen Tabelle

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

Zeilen einfügen

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

Ergebnisse

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