sql >> Databasteknik >  >> RDS >> PostgreSQL

Lägg till kolumn för automatisk ökning i befintlig tabell sorterad efter datum

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.




  1. Hur skapar jag ett DESC-index i MySQL?

  2. Hur man importerar Excel-fil till mysql-databasen från PHP

  3. Mysql väljer (n) rader för varje förekomst

  4. ORA-02253:begränsningsspecifikation är inte tillåten här