Auto increment einer bestehenden Spalte hinzufügen

Ludwigmller

SQL-Guru
Beiträge
171
Ich möchte gerne einer bestehenden Spalte "id", die bereits primary key ist, auto increment hinzufügen, sodass automatisch die id fortgezählt wird.

Ich habe es mit dem Datentyp Serial veruscht. Die Abfrage
Code:
alter table t alter column id type serial;
liefert den Fehler " Typ »serial« existiert nicht".

Wie kann ich das realisieren?


Gruß Ludwig
 
Werbung:
Code:
edb=> create table demo(id int primary key, data text);
CREATE TABLE
edb=*> create sequence my_seq owned by demo.id;
CREATE SEQUENCE
edb=*> alter table demo alter column id set default nextval('my_seq');
ALTER TABLE
edb=*> insert into demo (data) values ('test');
INSERT 0 1
edb=*> select * from demo;
 id | data
----+------
  1 | test
(1 row)

edb=*>
edb=*> \d demo
                          Table "public.demo"
 Column |  Type   | Collation | Nullable |           Default           
--------+---------+-----------+----------+-----------------------------
 id     | integer |           | not null | nextval('my_seq'::regclass)
 data   | text    |           |          |
Indexes:
    "demo_pkey" PRIMARY KEY, btree (id)
 
Werbung:
Mit aktuellen Postgres Versionen (>= 10) wird empfohlen, identity Spalten zu verwenden. Von der Verwendung von serial wird abgeraten.

Code:
alter table the_table
  alter id add generated always as identity;

Danach musst Du die Sequence noch an die Werte in der Tabelle anpassen, damit der nächste INSERT nicht einen Wert generiert den es schon gibt:

Code:
select setval(pg_get_serial_sequence('the_table', 'id'), max(id))
from the_table;
 
Zurück
Oben