PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Dodaj kolumnę automatycznego przyrostu do istniejącej tabeli uporządkowanej według daty

Jeśli dodasz taką kolumnę szeregową, istniejące wiersze zostaną automatycznie zaktualizowane w „dowolnej” kolejności.

Aby kontrolować kolejność generowania identyfikatorów, musisz to zrobić w kilku krokach:

Najpierw dodaj kolumnę bez domyślny (serial implikuje wartość domyślną)

ALTER TABLE tickets ADD COLUMN ticket_id integer;

Następnie utwórz sekwencję, aby wygenerować wartości:

create sequence tickets_ticket_id_seq;

Następnie zaktualizuj istniejące wiersze

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;

Następnie ustaw sekwencję jako domyślną dla nowej kolumny

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

Na koniec skojarz sekwencję z kolumną (co jest tym, co serial działa również w tle):

alter sequence tickets_ticket_id_seq owned by tickets.ticket_id;

Jeśli stół jest naprawdę duży („dziesiątki” lub „setki” milionów), utworzenie nowej tabeli może być szybsze:

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;

Następnie ponownie utwórz wszystkie klucze obce i indeksy dla tej tabeli.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Suma różnicy czasu między wierszami

  2. Jak zdefiniować sekwencję do użycia podczas tworzenia tabeli w migracji ActiveRecord w Ruby on Rails 5.2?

  3. Eksportowanie tabeli AWS Postgres RDS do AWS S3

  4. Porządkowanie odrębnych wartości kolumn według (pierwszej wartości) innej kolumny w funkcji agregującej

  5. agregat pustego zbioru wyników