2017-05-04 3 views
5

Rails 5.1.0 introduit les clés primaires et les clés étrangères bigint.Rails 5.1.0 comment mettre à niveau

Toutes les nouvelles tables auront bigint pk et la création d'une migration de référence vers une ancienne table ne fonctionnera pas puisque l'ancien pk est un int normal. En utilisant change_column _, :id,:bigint seulement des erreurs avec une clé étrangère pointent vers elle, pour ne pas mentionner tout le travail manuel de trouver toutes les tables et qui a quelle clé qui doit être modifiée.

Comment migrer ma base de données de production toutes mes tables pour utiliser bigint pk et fk?

Bien sûr, puisque c'est la production rails db:drop rails db:setup n'est pas une option.

+0

En CHANGELOG je trouve que seules les clés primaires sont devenues BIGINT. Pourriez-vous trouver un lien sur les changements de comportement des clés étrangères? – Ilya

+0

J'ai essayé de créer une table référençant à une vieille table et elle échoue parce que l'ancienne table a un petit intpk. La modification de la migration de [5.1] à [5.0] l'a fait fonctionner excepté aucun bigint. Donc ça n'a pas changé mais ça a un impact sur les fk. –

Répondre

1

Je fais face au même problème. Suppression temporaire fk devrait fonctionner. Le but est de changer toutes les clés primaires de int à bigint.

vous devez faire cela avec toutes vos tables et colonnes de clé étrangère poignée peut-être des indices de la même façon, je ne

comparé ce
+0

Merci ouais cela fonctionnera probablement, mais j'ai beaucoup de tables est-il impossible de tout faire en même temps? Ou désactiver la situation de bigint? –

+0

Vous pouvez automatiser cela avec toutes les clés primaires, le plus gros problème sont les colonnes de clé étrangère qui pointent vers une clé primaire, il est possible d'automatiser cela mais plus difficile. Il suffit d'écrire une boucle sur toutes les tables, modifier la clé primaire, modifier aussi les colonnes avec "_id" et avec integer comme type de données, cela devrait fonctionner –

+0

J'ai beaucoup de tables, je peux probablement utiliser mes compétences en texte sublime mais je ne veux pas faire autant de travail manuel pour améliorer. Appelez-moi paresseux mais je pense que les rails devraient avoir introduit une stratégie pour le faire. –