PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

Добавете колона за автоматично нарастване към съществуваща таблица, подредена по дата

Ако добавите последователна колона като тази, съществуващите редове автоматично ще бъдат актуализирани в „произволен“ ред.

За да контролирате реда, в който се генерират идентификаторите, трябва да направите това в няколко стъпки:

Първо добавете колоната без по подразбиране (serial предполага стойност по подразбиране)

ALTER TABLE tickets ADD COLUMN ticket_id integer;

След това създайте последователност за генериране на стойностите:

create sequence tickets_ticket_id_seq;

След това актуализирайте съществуващите редове

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;

След това направете последователността по подразбиране за новата колона

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

И накрая, свържете последователността с колоната (което е това, което serial прави и във фонов режим):

alter sequence tickets_ticket_id_seq owned by tickets.ticket_id;

Ако таблицата е наистина голяма („десетки“ или „стотици“ милиони), тогава създаването на нова таблица може да е по-бързо:

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;

След това създайте отново всички външни ключове и индекси за тази таблица.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQL:Изваждане на 1 ден от дата на клеймо за време

  2. Как да получите броя на INNER присъединяването и броя на броя на всички елементи?

  3. Как да групираме и броим по дни в Rails в Postgres?

  4. Индексът не се използва, когато LIMIT се използва в postgres

  5. Грешка при компилиране на статичен Qt 5.10.0 с PostgreSQL