====== Suppressions des activités et objets distants anciens ====== ===== Sans tenir compte des personnes suivies ===== -- Il est important de d'abord traiter la table activities -- puisqu'ensuite on supprime les objets qui n'ont plus -- de lien avec cette table. -- -- 1ère partie pour la table activities -- DELETE FROM activities WHERE local = false AND updated_at < (CURRENT_DATE - INTERVAL '90 days'); -- Ici 90 jours, à ajuster si besoin -- -- 2ème partie pour la table objects -- DELETE FROM objects WHERE id NOT IN (SELECT CAST(data->>'context_id' AS BIGINT) FROM activities) AND data->>'actor' NOT LIKE '%pleroma.antoineve.me%' -- Personnaliser le nom de l'instance ! AND updated_at < (CURRENT_DATE - INTERVAL '90 days'); -- Ici 90 jours, à ajuster si besoin ===== En tenant compte des personnes suivies ===== Seul la première partie de la commande change : -- Il est important de d'abord traiter la table activities -- puisqu'ensuite on supprime les objets qui n'ont plus -- de lien avec cette table. -- -- 1ère partie pour la table activities -- DELETE FROM activities WHERE local = false AND updated_at < (CURRENT_DATE - INTERVAL '90 days') -- Ici 90 jours, à ajuster si besoin AND data->>'actor' NOT IN ( SELECT ap_id FROM users WHERE id IN ( SELECT following_id FROM following_relationships WHERE follower_id IN ( SELECT id FROM users WHERE ap_id LIKE '%pleroma.antoineve.me%' -- Personnaliser le nom de l'instance ! AND nickname IS NOT NULL AND nickname NOT LIKE '%fetch%'))); -- -- 2ème partie pour la table objects -- DELETE FROM objects WHERE id NOT IN (SELECT CAST(data->>'context_id' AS BIGINT) FROM activities) AND data->>'actor' NOT LIKE '%pleroma.antoineve.me%' -- Personnaliser le nom de l'instance ! AND updated_at < (CURRENT_DATE - INTERVAL '90 days'); -- Ici 90 jours, à ajuster si besoin ====== Suppressions d'utilisateurs (distants) ====== ===== Ceux qui n'ont aucun lien avec les activités ou les objets ===== DELETE FROM users WHERE ap_id NOT IN ( SELECT data->>'actor' AS actor FROM objects WHERE data->>'actor' IS NOT NULL GROUP BY actor HAVING COUNT(*) > 1) -- Pour dédupliquer 8-) AND ap_id NOT IN ( SELECT actor FROM activities GROUP BY actor HAVING COUNT(*) > 1) AND ( ap_id LIKE '%/u%/%' -- Certains services ActivityPub OR ap_id LIKE '%/account%/%' -- utilisent d'autres termes OR ap_id LIKE '%/profile/%' -- pour l'uri du profil utilisateur. OR ap_id LIKE '%/@/%' -- Ce filtre permet d'éviter d'effacer OR ap_id LIKE '%/author/%'); -- des relais, des collections, ... ===== Ceux qui n'ont aucun followers et ne suivent personnes ===== DELETE FROM users WHERE following_count = 0 AND follower_count = 0;