sql >> Database >  >> RDS >> PostgreSQL

Kolom voor automatische verhoging toevoegen aan bestaande tabel, gesorteerd op datum

Als u zo'n seriële kolom toevoegt, worden de bestaande rijen automatisch bijgewerkt in een "willekeurige" volgorde.

Om de volgorde te bepalen waarin de ID's worden gegenereerd, moet u dit in meerdere stappen doen:

Voeg eerst de kolom zonder . toe een standaard (serial impliceert een standaardwaarde)

ALTER TABLE tickets ADD COLUMN ticket_id integer;

Maak vervolgens een reeks om de waarden te genereren:

create sequence tickets_ticket_id_seq;

Werk vervolgens de bestaande rijen bij

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;

Maak vervolgens de reeks de standaard voor de nieuwe kolom

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

Koppel ten slotte de reeks aan de kolom (wat een serial . is) doet het ook op de achtergrond):

alter sequence tickets_ticket_id_seq owned by tickets.ticket_id;

Als de tafel erg groot is ("tientallen" of "honderden" miljoenen), kan het maken van een nieuwe tafel sneller gaan:

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;

Maak vervolgens alle externe sleutels en indexen voor die tabel opnieuw.




  1. Hoe deze MySQL-query te sorteren?

  2. pg_config, ruby ​​pg, postgresql 9.0 probleem na upgrade, centos 5.

  3. PHP/PostgreSQL:controleer of er al een voorbereid statement bestaat

  4. De database [dbName] is niet toegankelijk. (Objectverkenner)