007_add_user_allowed_groups.sql 828 B

1234567891011121314151617181920
  1. -- Add user_allowed_groups join table to replace users.allowed_groups (BIGINT[]).
  2. -- Phase 1: create table + backfill from the legacy array column.
  3. CREATE TABLE IF NOT EXISTS user_allowed_groups (
  4. user_id BIGINT NOT NULL REFERENCES users(id) ON DELETE CASCADE,
  5. group_id BIGINT NOT NULL REFERENCES groups(id) ON DELETE CASCADE,
  6. created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
  7. PRIMARY KEY (user_id, group_id)
  8. );
  9. CREATE INDEX IF NOT EXISTS idx_user_allowed_groups_group_id ON user_allowed_groups(group_id);
  10. -- Backfill from the legacy users.allowed_groups array.
  11. INSERT INTO user_allowed_groups (user_id, group_id)
  12. SELECT u.id, x.group_id
  13. FROM users u
  14. CROSS JOIN LATERAL unnest(u.allowed_groups) AS x(group_id)
  15. JOIN groups g ON g.id = x.group_id
  16. WHERE u.allowed_groups IS NOT NULL
  17. ON CONFLICT DO NOTHING;