Защо не добавите сериен
колона с първичен ключ към таблицата?
ALTER TABLE login ADD column login_id serial;
ALTER TABLE login ADD CONSTRAINT login_pkey PRIMARY KEY(login_id);
Първата операция ще пренапише таблицата и ще заключи за известно време. След това ще стартирам
VACCUM FULL ANALYZE login;
По-ниски алтернативи:row_number()
както посочено от @Joachim
. За максимална производителност можете да оставите OVER
празна клауза:
row_number() OVER () AS rn
Освен това:използвайте AS
ключова дума за псевдоними на колони (докато те са просто шум за псевдоними на таблици).
Или можете да използвате ctid
като заместител на първичен ключ на бедния човек. Това би било още по-бързо :
Подробности:
Генериране на последователност по ред
Пример за dba.SE:
номериране на редове последователно за определен брой таблици