sql >> Databáze >  >> RDS >> PostgreSQL

Přidejte sloupec automatického přírůstku do existující tabulky seřazené podle data

Pokud přidáte sériový sloupec, jako je tento, stávající řádky se automaticky aktualizují v "libovolném" pořadí.

Chcete-li řídit pořadí, ve kterém jsou ID generována, musíte to udělat v několika krocích:

Nejprve přidejte sloupec bez výchozí (serial znamená výchozí hodnotu)

ALTER TABLE tickets ADD COLUMN ticket_id integer;

Poté vytvořte sekvenci pro generování hodnot:

create sequence tickets_ticket_id_seq;

Poté aktualizujte stávající řádky

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;

Poté nastavte sekvenci jako výchozí pro nový sloupec

alter table tickets alter column ticket_id set default nextval('tickets_ticket_id_seq');

Nakonec přiřaďte sekvenci ke sloupci (což je serial dělá také na pozadí):

alter sequence tickets_ticket_id_seq owned by tickets.ticket_id;

Pokud je tabulka opravdu velká ("desítky" nebo "stovky" milionů), může být vytvoření nové tabulky rychlejší:

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;

Poté znovu vytvořte všechny cizí klíče a indexy pro tuto tabulku.




  1. zkontrolujte, zda se jedná o číselnou funkci v Oracle

  2. Tabulka hodnotná funkce Killing My Query Performance

  3. Zrušte tabulku, pokud existuje

  4. Yii2:automatické vyplňování polí na základě jiného pole ze související tabulky