Есть таблица:
CREATE TABLE categories (
category_id integer NOT NULL,
parent_id integer DEFAULT 0,
title character varying(200),
position integer DEFAULT 0
);
Используется для организации иерархии неких категорий, без ограничения уровня вложенности. Недавно было добавлено поле position для возможности произвольного порядка вывода подкатегорий, оно уникально в рамках одного parent_id. То есть используется запрос:
SELECT * FROM categories WHERE parent_id=... ORDER BY position
К моменту добавления этого поля в таблице уже было прилично так записей, так что ручное первоначальное прописывание значений position - не вариант.
Нужно как-то автоматически заполнить это поле возрастающими от 1 значениями внутри из каждой подкатегории. То есть, например, при выполнении запроса
SELECT *, row_number() over() as rn FROM categories WHERE parent_id=... ORDER BY category_id
выводится последовательность в поле rn.
Так вот можно написать какой-нибудь хитрый UPDATE, чтобы первоначально эту самую последовательность записать в поле position?