カスタムバッジとトリガーの作成

カスタムバッジクエリを作成していました。すでに一つ正常に作成して保存済みです。これはエラーなく動作しました:

SELECT user_id, 0 post_id, current_timestamp granted_at 
FROM badge_posts  
WHERE (:backfill OR user_id IN (:user_ids) OR 0 NOT IN (:post_ids) )
GROUP BY user_id 
HAVING count(*) > 499

これはこちらから取得しました:Some common badge queries

このクエリで選択したトリガーは「投稿が処理された後」で、「ユーザーが投稿を編集または作成したとき」ではありませんでした。トリガーを後者に変更するとエラーが発生します。

異なるトリガーに関する詳細を探しましたが、見つかったトピックはこれだけでした:Creating triggered custom badge queries

私のバッジクエリのほとんどは、投稿数や返信数、特定のカテゴリでのトピック作成に基づいています。

これら 3 つのトリガーの違いと、クエリに基づいていつそれらを選択すべきか理解しようとしています。

  1. 投稿が処理された後
  2. ユーザーが投稿に対してアクションを取ったとき
  3. ユーザーが投稿を編集または作成したとき

なぜ #3 をトリガーとして選択するとエラーになったのに、#1 ではエラーにならなかったのでしょうか?

このクエリを使って別のバッジクエリを作成しようとしました:

SELECT p.user_id, min(p.created_at) granted_at, MIN(p.id) post_id
FROM badge_posts p
JOIN topics t ON t.id = p.topic_id
WHERE category_id = (
  SELECT id FROM categories WHERE name ilike 'foo'
) AND p.post_number = 1
GROUP BY p.user_id 

ここで ‘foo’ はカテゴリのスラッグになります。今回は、トリガーを空白のままにするか「毎日更新」を選択するとエラーなく保存されます。しかし、トリガーを上記の 1〜3 のいずれかに変更するとエラーが発生します。

これは、SQL クエリが :post_ids に基づいてどのようにトリガーするかに関する情報が不足しているためだと思います。もし私の推測が正しいなら、上記のクエリを毎日更新ではなく、foo カテゴリのすべての投稿でトリガーされるように修正するにはどうすればよいでしょうか?

トリガーに関する説明や、さらに詳しく読めるリファレンスがあれば幸いです。

「いいね!」 4