Closed francois-ferrandis closed 1 week ago
cf https://thoughtbot.com/blog/how-to-create-postgres-indexes-concurrently-in pour comprendre disable_ddl_transaction!
et algorithm: :concurrently
J'ai testé la migration sur un dump de prod en local (en activant transaction et safety_assured)
tu peux me guider pour comprendre ces options transaction et safety assured ?
J'ai testé la migration sur un dump de prod en local (en activant transaction et safety_assured)
tu peux me guider pour comprendre ces options transaction et safety assured ?
Comme l'indique l'article que tu as partagé, il y a deux façons de créer un index :
Je voulais vérifier qu'il n'y avait pas de doublon en prod, et pour ce faire j'ai voulu lancer notre migration, mais en synchrone, pour avoir une erreur qui pop, car je ne sais pas où l'erreur apparaîtrait pour une création asynchrone.
Et donc concrètement j'ai commenté disable_ddl_transaction!
et algorithm: :concurrently
. Une fois que j'ai fait ça, si je lance db:migrate
, la gem strong_migration
me dit que l'ajout synchrone d'index est dangereux, et que si je suis sûr de vouloir le faire, je dois envelopper mon code de migration avec safety_assured
(voir doc), ce que j'ai fait avant de lancer la migration.
très clair @francois-ferrandis merci beaucoup 🙇
On peut donc en déduire qu’il n’y a aucun cas problématique en prod jusqu’à aujourd’hui c’est bien ça ? cas problématiques = des doublons dans ces tables de jointures
très clair @francois-ferrandis merci beaucoup 🙇
On peut donc en déduire qu’il n’y a aucun cas problématique en prod jusqu’à aujourd’hui c’est bien ça ? cas problématiques = des doublons dans ces tables de jointures
Oui, c'est ça, et en extrapolant on pourrait en déduire que cette PR relève de la paranoïa, ce dont je suis prêt à débattre. :thinking:
Contexte
Nous avons deux tables de jointure qui n'ont aucune garantie d'unicité. Cela peut mener à des incohérence dans nos données.
Solution
Pour garantir cette unicité, nous pouvons :
D'un point de vue logique, j'aurais aimé ajouter une primary key, mais actuellement nous n'en n'avons aucune sur nos tables de jointures, et nous utilisons plutôt la solution 1.
Côté perfs, un index sur
[col1, col2]
sera utilisé et efficace pour unWHERE col1 = x
mais moins efficace pourWHERE col2 = x
(voir doc ^1). Je pense donc qu'on pourra supprimer les index sur noscol1
, dans une prochaine PR.Déploiement
J'ai testé la migration sur un dump de prod en local (en activant transaction et
safety_assured
) et ça passe en une poignée de millisecondes, sûrement parce qu'il construit l'index composite à partir des deux index existants. :zap:Checklist
Extraire dans d'autres PRs les changements indépendants, si nécessairePréparer des captures de l’interface avant et après