Então, eu estava criando uma consulta personalizada para emblemas. Já criei uma com sucesso e a salvei. Esta funcionou sem erros:
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
Eu a obtive daqui: Some common badge queries
O gatilho que escolhi para isso foi “Após um post ser processado” em vez de “Quando um usuário edita ou cria um post”. Se eu mudar o gatilho para o último, aparecerá um erro.
Tentei encontrar mais informações sobre os diferentes gatilhos e o único tópico que encontrei está aqui: Creating triggered custom badge queries
Quase todas as minhas consultas de emblemas dependem do número de posts ou respostas ou da criação de tópicos em uma categoria específica.
Estou tentando entender qual é a diferença entre esses 3 gatilhos e quando você escolhe um com base na consulta?
- Após um post ser processado
- Quando um usuário age sobre um post
- Quando um usuário edita ou cria um post
Por que obtive um erro ao escolher o #3 como gatilho, mas não ao escolher o #1?
Tentei criar outra consulta de emblema usando esta:
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
Onde ‘foo’ seria o slug da minha categoria. Desta vez, se eu deixar o gatilho em branco ou escolher “Atualizar diariamente”, será salvo sem erros. Se eu mudar o gatilho para qualquer um dos 1-3 acima, haverá um erro.
Acho que é porque a consulta SQL está faltando informações sobre como acioná-la com base em :post_ids? Se eu estiver certo, como corrigiria a consulta acima para que não seja diária, mas acione em cada post na categoria ‘foo’?
Qualquer explicação seria apreciada ou uma referência para onde posso ler mais sobre gatilhos.