Postgres Primary Key & auto_increment??

christofj

Fleissiger Benutzer
Beiträge
55
Hallo zusammen,

gibt es bei PG eine auto_increment Option für den Primary Key wie es das bei MySQL gibt?
In der Doku habe ich nichts dergleichen gefunden.

Den Umstieg vom MySQL auf PG hat das Forum bei mir schon geschafft aber jetzt kommen bei mir solche Fragen auf.

Danke vorab.
 
Werbung:
Ja, SERIAL.

Code:
test=# create table christofj(id serial primary key, val numeric);
CREATE TABLE
test=*# insert into christofj (val) select random() from generate_Series(1,5) s;
INSERT 0 5
test=*# select * from christofj;
 id |  val   
----+--------------------
  1 |  0.707765285391361
  2 |  0.887575940228999
  3 |  0.901669600047171
  4 | 0.0935061438940465
  5 |  0.822723474819213
(5 Zeilen)

test=*# \d christofj;
  Tabelle »public.christofj«
 Spalte |  Typ  | Sortierfolge | NULL erlaubt? |  Vorgabewert   
--------+---------+--------------+---------------+---------------------------------------
 id  | integer |  | not null  | nextval('christofj_id_seq'::regclass)
 val  | numeric |  |  |
Indexe:
  "christofj_pkey" PRIMARY KEY, btree (id)

test=*#

Der Vorteil ist, Du kannst eine Sequence (SERIAL erzeugt impliziet eine solche) auch für mehrere Tabellen verwenden.
 
Der Typ serial beinhaltet einen integer, der sich selbst erhöht.

Beispiel:
Code:
create table tabelle(id serial primary key, value text);

Mögliche Inserts:
Code:
insert into tabelle(value) values('Testnachricht');

Möglicher select:
Code:
select * from tabelle;

Ergebniss sollte jetzt 2 Spalten mit einem integer als ID und eben Testnachricht in der 2. sein.
Aber, um zu probieren, ob er sich selbst erhöht:

Code:
insert into tabelle(value) values('Und so weiter');

Und nun das anzeigen lassen:
Code:
select * from tabelle;

Jetzt sollte die ID automatisch weiterführen ;)

EDIT:
Mist, herr Elephant war schneller :( *Mich im Eck wiedermal schäm*
 
Um noch mal den Einsatz in 2 Tabellen zu zeigen:

Code:
test=# create sequence demo_sequence;
CREATE SEQUENCE
test=*# create table demo_a(id int primary key default nextval('demo_sequence'), val text);
CREATE TABLE
test=*# create table demo_b(id int primary key default nextval('demo_sequence'), val text);
CREATE TABLE
test=*# insert into demo_a (val) values ('erster');
INSERT 0 1
test=*# insert into demo_b (val) values ('zweiter');
INSERT 0 1
test=*# insert into demo_a (val) values ('dritter');
INSERT 0 1
test=*# select * from demo_a ;
 id |  val   
----+---------
  1 | erster
  3 | dritter
(2 Zeilen)

test=*# select * from demo_b;
 id |  val   
----+---------
  2 | zweiter
(1 Zeile)

test=*#
 
Werbung:
Zurück
Oben