sql >> Databasteknik >  >> RDS >> PostgreSQL

Tillfällig sekvens inom en SELECT

Varför lägger du inte till en serie primärnyckelkolumn till tabellen?

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

Den första operationen kommer att skriva om tabellen och ta ett lås under en tid. Jag skulle sedan köra

VACCUM FULL ANALYZE login;

Sämre alternativ:row_number() som påpekat av @Joachim . För maximal prestanda kan du lämna OVER klausul tom:

row_number() OVER () AS rn

Bortsett från:använd AS nyckelord för kolumnalias (medan de bara är brus för tabellalias).

Eller så kan du använda ctid som fattigmans surrogat för en primärnyckel. Det skulle vara ännu snabbare :

Detaljer:
Sekvensgenerering i beställning

Exempel på dba.SE:
numrering av rader i följd för ett antal tabeller



  1. Autocommit i Flask-SQLAlchemy

  2. Hur SPACE() fungerar i MariaDB

  3. Åtkomst till MySQL från Python 3:Åtkomst nekad för användaren

  4. Fråga om antalet objekt i ett träd