Maison  >  Article  >  développement back-end  >  Remplissez les nouvelles colonnes avec les valeurs du code Go

Remplissez les nouvelles colonnes avec les valeurs du code Go

王林
王林avant
2024-02-06 11:27:03916parcourir

使用 Go 代码中的值回填新列

Contenu de la question

Quelle est la meilleure façon de remplir une nouvelle colonne avec des valeurs du code de l'application Go ? Idéalement, je parcourirais chaque ligne, appellerais le code Go et utiliserais la valeur de retour comme valeur de colonne. Le code Go est avec état. Autrement dit, il agit sur la structure des données qui est mise à jour à chaque nouvelle ligne et calcule une valeur basée sur ces informations.

Ce que je pense faire, c'est effectuer une migration, ajouter les nouvelles colonnes comme nullables, puis exécuter un programme Go après la migration pour remplir les lignes. Mais il serait préférable que tout cela puisse être fait en une seule migration, d'autant plus que la colonne ne doit pas être NULL en premier lieu.

Nous utilisons Flyway pour la migration. Notre base de données est Postgres 11.5.


Bonne réponse


Il n'est pas possible de remplir de nouvelles colonnes de cette manière via la migration - c'est-à-dire en une seule étape au sein d'une transaction. Au lieu de cela, vous avez besoin de quelque chose comme :

  1. Mettez à jour l'application pour gérer correctement les lignes des nouvelles colonnes avec des valeurs marquées avant l'horodatage 123.
  2. Ajoutez une nouvelle colonne avec une contrainte non nulle et une valeur de balise par défaut lors de la migration.
  3. Exécutez le programme go pour mettre à jour la valeur sentinelle de la ligne avant l'horodatage 123 à la valeur appropriée.

Cette méthode nécessite des modifications de l'application mais ne nécessite pas de fenêtre de maintenance. Cela garantit également que les migrations n'échouent pas parce que les contraintes ne sont pas satisfaites au moment de la migration.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer
Article précédent:Aller au modèle si conditionArticle suivant:Aller au modèle si condition