Создание пользовательских значков и триггеров

Итак, я создаю пользовательский запрос для значков. У меня уже есть один успешно созданный и сохранённый запрос. Он работал без ошибок:

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

Почти все мои запросы на значки зависят от количества публикаций или ответов либо от создания тем в конкретной категории.

Я пытаюсь понять, в чём разница между этими тремя триггерами и когда какой из них следует выбирать в зависимости от запроса?

  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» — это слаг (slug) моей категории. На этот раз, если я оставлю поле триггера пустым или выберу «Обновлять ежедневно», запрос сохранится без ошибок. Если же я изменю триггер на любой из вариантов 1–3 выше, возникнет ошибка.

Думаю, это связано с тем, что в SQL-запросе отсутствует информация о том, как его запускать на основе :post_ids? Если я прав, как исправить вышеуказанный запрос, чтобы он не был ежедневным, а срабатывал при каждой публикации в категории foo?

Буду признателен за любые пояснения или ссылку на материалы, где можно подробнее узнать о триггерах.

4 лайка