Om du lägger till en sådan seriell kolumn kommer de befintliga raderna automatiskt att uppdateras i en "godtycklig" ordning.
För att kontrollera i vilken ordning ID:n genereras måste du göra detta i flera steg:
Lägg först till kolumnen utan en standard (serial
innebär ett standardvärde)
ALTER TABLE tickets ADD COLUMN ticket_id integer;
Skapa sedan en sekvens för att generera värdena:
create sequence tickets_ticket_id_seq;
Uppdatera sedan de befintliga raderna
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 sedan sekvensen till standard för den nya kolumnen
alter table tickets alter column ticket_id set default nextval('tickets_ticket_id_seq');
Till sist, associera sekvensen med kolumnen (vilket är en serial
gör i bakgrunden också):
alter sequence tickets_ticket_id_seq owned by tickets.ticket_id;
Om bordet är riktigt stort ("tiotals" eller "hundratals" miljoner) kan det gå snabbare att skapa ett nytt bord:
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;
Återskapa sedan alla främmande nycklar och index för den tabellen.