Hvis du tilføjer sådan en seriel kolonne, vil de eksisterende rækker automatisk blive opdateret i en "vilkårlig" rækkefølge.
For at kontrollere den rækkefølge, som ID'erne genereres i, skal du gøre dette i flere trin:
Tilføj først kolonnen uden en standard (serial
indebærer en standardværdi)
ALTER TABLE tickets ADD COLUMN ticket_id integer;
Opret derefter en sekvens for at generere værdierne:
create sequence tickets_ticket_id_seq;
Opdater derefter de eksisterende rækker
update tickets
set ticket_id = t.new_id
from (
select id, nextval('tickets_ticket_id_seq') as new_id
from tickets
order by "date"
) t
where t.id = tickets.id;
Gør derefter sekvensen til standard for den nye kolonne
alter table tickets alter column ticket_id set default nextval('tickets_ticket_id_seq');
Tilknyt endelig sekvensen med kolonnen (hvilket er en serial
gør det også i baggrunden):
alter sequence tickets_ticket_id_seq owned by tickets.ticket_id;
Hvis bordet er rigtig stort ("tiere" eller "hundrede" af millioner), kan det være hurtigere at oprette en ny tabel:
create sequence tickets_ticket_id_seq;
create table tickets_new
as
select id, nextval('activities_ticket_id_seq') ticket_id, "date", status
from tickets
order by "date";
drop table tickets cascade;
alter table tickets_new rename to tickets;
alter table tickets add primary key (id);
alter sequence tickets_ticket_id_seq owned by tickets.ticket_id;
Genskab derefter alle fremmednøgler og indekser for den tabel.