36 lines
1.1 KiB
SQL
36 lines
1.1 KiB
SQL
-- Migration: Add member_number field to group_members table
|
|
-- Date: November 6, 2025
|
|
-- Purpose: Add readable serial number for each member within a group
|
|
|
|
-- Step 1: Add the column (allows NULL temporarily for existing data)
|
|
ALTER TABLE group_members
|
|
ADD COLUMN member_number INTEGER;
|
|
|
|
-- Step 2: Populate member_number for existing members
|
|
-- This assigns sequential numbers based on joined_date (earliest = #1)
|
|
WITH numbered_members AS (
|
|
SELECT
|
|
id,
|
|
ROW_NUMBER() OVER (
|
|
PARTITION BY group_id
|
|
ORDER BY joined_date ASC, created_at ASC
|
|
) as assigned_number
|
|
FROM group_members
|
|
)
|
|
UPDATE group_members gm
|
|
SET member_number = nm.assigned_number
|
|
FROM numbered_members nm
|
|
WHERE gm.id = nm.id;
|
|
|
|
-- Step 3: Make the column NOT NULL
|
|
ALTER TABLE group_members
|
|
ALTER COLUMN member_number SET NOT NULL;
|
|
|
|
-- Step 4: Add unique constraint (group_id + member_number must be unique)
|
|
CREATE UNIQUE INDEX idx_group_members_member_number
|
|
ON group_members(group_id, member_number);
|
|
|
|
-- Step 5: Add comment
|
|
COMMENT ON COLUMN group_members.member_number IS 'Readable serial number for the member within this group (1, 2, 3...)';
|
|
|