Я пытаюсь создать новые идентификаторы для большой таблицы. Идентификаторы должны быть последовательных и должны начать с 0 (Поэтому я не могу использовать последовательность). То, что я придумал до сих пор является следующая функция:Оптимизация запросов PostgreSQL
CREATE OR REPLACE FUNCTION genIds() RETURNS integer AS $$
DECLARE
edge RECORD;
i INTEGER := 0;
BEGIN
FOR edge IN SELECT * FROM network LOOP
UPDATE network SET id = i WHERE id = edge.id;
i := i + 1;
END LOOP;
RETURN i;
END;
$$ LANGUAGE plpgsql;
Я бы предпочел бы, чтобы не заботиться о ID = edge.id, так как я на самом деле не волнует идентификаторами в любом случае. Есть ли способ избежать подсчета (сетевого) обновления?
Приветствия, Daniel
Btw: вы _can_ начинаете последовательность в '0':' create sequence foo_seq начинаются с 0 minvalue 0; ' –
Я думал, что последовательности не гарантируют беспроблемность? –
Они не все правильно (я думал, вы просто не хотели их использовать, потому что вы не могли заставить их начинать с 0). –