特定のグループに属さないすべてのユーザーを削除

自分自身の質問に回答します。いくつかの教訓を学びました。

  1. はい、UserDestroyer を使用してください。そうしないと、孤立したレコードがデータベースに散乱してしまいます。
  2. 不要なユーザーを収集する方法には工夫が必要かもしれません。私は以下の Data Explorer クエリを使用してユーザーのリストを取得し、それを unwanted というグループに一括追加しました。
WITH included_users AS (
SELECT
gu.user_id
FROM group_users gu
JOIN groups g
ON g.id = gu.group_id
WHERE g.name = :included_group
),

excluded_users AS (
SELECT
gu.user_id
FROM group_users gu
JOIN groups g
ON g.id = gu.group_id
WHERE g.name = :excluded_group
)

SELECT 
     u.id AS user_id, u.username
FROM users as u
WHERE u.id in (SELECT user_id FROM included_users)
AND u.id NOT IN (SELECT user_id FROM excluded_users)
GROUP by u.id

多数のユーザーを削除する方法:

Discourse アプリにアクセスし(./launcher enter app など)、以下を実行してください。

rails c
 target_group = Group.find_by_name("unwanted")
 users = User.joins(:group_users).where(group_users:{group_id: target_group.id})
 users.each do |u|
  u.admin = false
  u.moderator = false
  u.save
  UserDestroyer.new(Discourse.system_user).destroy(u, delete_posts: true)
 end
Exit

高速ではありません。6000 人のユーザーの場合、2 時間かかりました。

「いいね!」 1