Heim >Backend-Entwicklung >Golang >Füllen Sie neue Spalten mit Werten aus dem Go-Code auf

Füllen Sie neue Spalten mit Werten aus dem Go-Code auf

王林
王林nach vorne
2024-02-06 11:27:03944Durchsuche

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

Frageninhalt

Was ist der beste Weg, eine neue Spalte mit Werten aus dem Go-Anwendungscode aufzufüllen? Im Idealfall würde ich jede Zeile durchlaufen, den Go-Code aufrufen und den Rückgabewert als Spaltenwert verwenden. Go-Code ist zustandsbehaftet. Das heißt, es wirkt auf die Datenstruktur ein, die in jeder neuen Zeile aktualisiert wird, und berechnet einen Wert basierend auf diesen Informationen.

Ich denke darüber nach, eine Migration durchzuführen, die neuen Spalten als nullfähige Spalten hinzuzufügen und dann nach der Migration ein Go-Programm auszuführen, um die Zeilen wieder aufzufüllen. Es wäre jedoch besser, wenn dies alles in einer Migration erledigt werden könnte, insbesondere da die Spalte nicht von vornherein NULL sein sollte.

Wir nutzen Flyway für die Migration. Unsere Datenbank ist Postgres 11.5.


Richtige Antwort


Es ist nicht möglich, neue Spalten auf diese Weise per Migration zu füllen – also in einem Schritt innerhalb einer Transaktion. Stattdessen benötigen Sie etwas wie:

  1. Aktualisieren Sie die App, um Zeilen in neuen Spalten mit markierten Werten vor dem Zeitstempel 123 ordnungsgemäß zu verarbeiten.
  2. Fügen Sie bei der Migration eine neue Spalte mit einer Nicht-Null-Beschränkung und einem Standard-Tag-Wert hinzu.
  3. Führen Sie das Go-Programm aus, um den Sentinel-Wert der Zeile vor Zeitstempel 123 auf den entsprechenden Wert zu aktualisieren.

Diese Methode erfordert Änderungen an der Anwendung, erfordert jedoch kein Wartungsfenster. Es stellt außerdem sicher, dass Migrationen nicht fehlschlagen, weil Einschränkungen zum Zeitpunkt der Migration nicht erfüllt sind.

Das obige ist der detaillierte Inhalt vonFüllen Sie neue Spalten mit Werten aus dem Go-Code auf. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:stackoverflow.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen
Vorheriger Artikel:Go-Vorlage, wenn BedingungNächster Artikel:Go-Vorlage, wenn Bedingung