github.com/benoitkugler/goacve@v0.0.0-20201217100549-151ce6e55dc8/server/migration/v2_to_v3/menage/delete_old.sql (about) 1 -- Ce script supprime les camps anciens ainsi que toutes les personnes 2 -- liées. Plus précisément on conserve : 3 -- - les membres de l'asso 4 -- - les donateurs 5 -- - les séjours 2018 et plus 6 -- - les participants/equipiers/responsables liés à de ces séjours 7 BEGIN; 8 9 CREATE FUNCTION too_old(date timestamp) RETURNS bool AS 'SELECT extract(year from date) < 2018;' LANGUAGE SQL; 10 11 CREATE TABLE keep_personnes (id_personne int REFERENCES personnes); 12 13 INSERT INTO 14 keep_personnes (id_personne) 15 SELECT 16 DISTINCT id 17 FROM 18 ( 19 SELECT 20 personnes.id 21 FROM 22 personnes 23 JOIN factures f ON personnes.id = f.id_personne 24 JOIN participants p ON f.id = p.id_facture 25 JOIN camps c ON p.id_camp = c.id 26 WHERE 27 NOT too_old(c.date_debut) 28 UNION 29 SELECT 30 personnes.id 31 FROM 32 personnes 33 JOIN participants p ON p.id_personne = personnes.id 34 JOIN camps c ON p.id_camp = c.id 35 WHERE 36 NOT too_old(c.date_debut) 37 UNION 38 SELECT 39 personnes.id 40 FROM 41 personnes 42 JOIN participantsimples p ON p.id_personne = personnes.id 43 JOIN camps c ON p.id_camp = c.id 44 WHERE 45 NOT too_old(c.date_debut) 46 UNION 47 SELECT 48 personnes.id 49 FROM 50 personnes 51 JOIN equipiers p ON p.id_personne = personnes.id 52 JOIN camps c ON p.id_camp = c.id 53 WHERE 54 NOT too_old(c.date_debut) 55 UNION 56 SELECT 57 personnes.id 58 FROM 59 personnes 60 WHERE 61 personnes.rang_membre_asso <> '' 62 UNION 63 SELECT 64 dons.id_personne 65 FROM 66 dons 67 WHERE 68 dons.id_personne IS NOT NULL 69 ) AS pfpgcippgci; 70 71 DELETE FROM 72 paiements 73 WHERE 74 id = ANY ( 75 SELECT 76 paiements.id 77 FROM 78 paiements 79 JOIN factures f ON paiements.id_facture = f.id 80 JOIN participants p ON f.id = p.id_facture 81 JOIN camps c ON p.id_camp = c.id 82 WHERE 83 too_old(c.date_debut) 84 ); 85 86 DELETE FROM 87 paiements 88 WHERE 89 id_facture = ANY ( 90 SELECT 91 factures.id 92 FROM 93 factures 94 WHERE 95 id_personne NOT IN ( 96 SELECT 97 keep_personnes.id_personne 98 FROM 99 keep_personnes 100 ) 101 ); 102 103 DELETE FROM 104 factures 105 WHERE 106 id = ANY ( 107 SELECT 108 factures.id 109 FROM 110 factures 111 JOIN participants p ON factures.id = p.id_facture 112 JOIN camps c ON p.id_camp = c.id 113 WHERE 114 too_old(c.date_debut) 115 ); 116 117 DELETE FROM 118 factures 119 WHERE 120 id_personne NOT IN ( 121 SELECT 122 keep_personnes.id_personne 123 FROM 124 keep_personnes 125 ); 126 127 DELETE FROM 128 documents 129 WHERE 130 id = ANY ( 131 SELECT 132 document_aides.id_document 133 FROM 134 document_aides 135 JOIN aides a ON document_aides.id_aide = a.id 136 JOIN participants p ON a.id_participant = p.id 137 JOIN camps c ON p.id_camp = c.id 138 WHERE 139 too_old(c.date_debut) 140 ); 141 142 DELETE FROM 143 aides 144 WHERE 145 id = ANY ( 146 SELECT 147 aides.id 148 FROM 149 aides 150 JOIN participants p ON aides.id_participant = p.id 151 JOIN camps c ON p.id_camp = c.id 152 WHERE 153 too_old(c.date_debut) 154 ); 155 156 DELETE FROM 157 messages 158 WHERE 159 id = ANY ( 160 SELECT 161 message_placeliberes.id_message 162 FROM 163 message_placeliberes 164 JOIN participants p ON message_placeliberes.id_participant = p.id 165 JOIN camps c ON p.id_camp = c.id 166 WHERE 167 too_old(c.date_debut) 168 ); 169 170 DELETE FROM 171 participants 172 WHERE 173 id = ANY ( 174 SELECT 175 participants.id 176 FROM 177 participants 178 JOIN camps c ON participants.id_camp = c.id 179 WHERE 180 too_old(c.date_debut) 181 ); 182 183 DELETE FROM 184 participantsimples 185 WHERE 186 id = ANY ( 187 SELECT 188 participantsimples.id 189 FROM 190 participantsimples 191 JOIN camps c ON participantsimples.id_camp = c.id 192 WHERE 193 too_old(c.date_debut) 194 ); 195 196 DELETE FROM 197 equipiers 198 WHERE 199 id = ANY ( 200 SELECT 201 equipiers.id 202 FROM 203 equipiers 204 JOIN camps c ON equipiers.id_camp = c.id 205 WHERE 206 too_old(c.date_debut) 207 ); 208 209 DELETE FROM 210 documents 211 WHERE 212 id = ANY ( 213 SELECT 214 document_camps.id_document 215 FROM 216 document_camps 217 JOIN camps c ON document_camps.id_camp = c.id 218 WHERE 219 too_old(c.date_debut) 220 ); 221 222 DELETE FROM 223 messages 224 WHERE 225 id = ANY ( 226 SELECT 227 message_documents.id_message 228 FROM 229 message_documents 230 JOIN camps c ON message_documents.id_camp = c.id 231 WHERE 232 too_old(c.date_debut) 233 ); 234 235 DELETE FROM 236 messages 237 WHERE 238 id = ANY ( 239 SELECT 240 message_sondages.id_message 241 FROM 242 message_sondages 243 JOIN camps c ON message_sondages.id_camp = c.id 244 WHERE 245 too_old(c.date_debut) 246 ); 247 248 DELETE FROM 249 camps 250 WHERE 251 too_old(camps.date_debut); 252 253 DELETE FROM 254 documents 255 WHERE 256 id = ANY ( 257 SELECT 258 id_document 259 FROM 260 document_personnes 261 WHERE 262 id_personne NOT IN ( 263 SELECT 264 id_personne 265 FROM 266 keep_personnes 267 ) 268 ); 269 270 DELETE FROM 271 personnes 272 WHERE 273 id NOT IN ( 274 SELECT 275 id_personne 276 FROM 277 keep_personnes 278 ); 279 280 -- cleanup 281 SELECT 282 count(*) 283 FROM 284 personnes; 285 286 DROP TABLE keep_personnes; 287 288 DROP FUNCTION too_old (date timestamp); 289 290 COMMIT;