21 lines
523 B
PL/PgSQL
21 lines
523 B
PL/PgSQL
BEGIN;
|
|
|
|
ALTER TABLE IF EXISTS list_users
|
|
ADD COLUMN IF NOT EXISTS position NOT NULL DEFAULT 0;
|
|
|
|
CREATE INDEX IF NOT EXISTS idx_list_users_user_id_position ON list_users (user_id, position);
|
|
|
|
UPDATE list_users lu
|
|
SET position = r.rn - 1
|
|
FROM (SELECT list_id,
|
|
user_id,
|
|
row_number() OVER (
|
|
PARTITION BY user_id
|
|
ORDER BY created_at, list_id
|
|
) AS rn
|
|
FROM list_users) r
|
|
WHERE lu.list_id = r.list_id
|
|
AND lu.user_id = r.user_id;
|
|
|
|
COMMIT;
|