sql >> Database teknologi >  >> RDS >> PostgreSQL

Midlertidig sekvens inden for en SELECT

Hvorfor tilføjer du ikke en serie primær nøglekolonne til tabellen?

ALTER TABLE login ADD column login_id serial;
ALTER TABLE login ADD CONSTRAINT login_pkey PRIMARY KEY(login_id);

Den første operation vil omskrive tabellen og tage en lås i nogen tid. Jeg ville derefter køre

VACCUM FULL ANALYZE login;

Underordnede alternativer:row_number() som påpeget af @Joachim . For maksimal ydeevne kan du forlade OVER klausul tom:

row_number() OVER () AS rn

Til side:brug AS nøgleord for kolonnealiasser (mens de kun er støj for tabelaliasser).

Eller du kan bruge ctid som fattigmands surrogat for en primærnøgle. Det ville være endnu hurtigere :

Detaljer:
Sekvensgenerering i rækkefølge

Eksempel på dba.SE:
nummerering af rækker fortløbende for et antal tabeller



  1. PHP:mysql_connect() virker ikke via kommandolinjen

  2. Hvordan implementerer man én-til-en, én-til-mange og mange-til-mange relationer, mens man designer tabeller?

  3. MySQL LEFT JOIN kun 1 række afhængig af MAX() værdi

  4. RAILS:Sådan forespørges efter alle de objekter, hvis hver tilknytning har en attribut, der ikke er null