sql >> Database teknologi >  >> RDS >> PostgreSQL

Tilføj automatisk stigningskolonne til eksisterende tabel sorteret efter dato

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.




  1. ECHO MYSQL RESULTAT DISPLAY BLANK SIDE

  2. mysql-opdatering - spring tomme felter over?

  3. Asynkron replikering automatisk failover i MySQL 8.0.22

  4. Libpuzzle Indeksering af millioner af billeder?