Sobes.tech
Senior

Opowiedz o migracjach baz danych: jak je przeprowadzaliście, jak obsługiwaliście błędy podczas migracji?

sobes.tech AI

Odpowiedź od AI

Zazwyczaj przeprowadzałem migracje bazy danych za pomocą narzędzi takich jak Goose lub Flyway, które pozwalają na zarządzanie wersjami schematu i stosowanie zmian w kolejności.

Proces migracji:

  1. Tworzyłem skrypty migracyjne z zmianami schematu (tworzenie tabel, modyfikacja kolumn itp.).
  2. Testowałem migracje w środowisku testowym.
  3. Wdrażałem migracje na stagingu, sprawdzając poprawność.
  4. Wykonywałem migrację na produkcji z minimalnym czasem przestoju.

Obsługa błędów:

  • Używałem transakcji w migracjach, aby w przypadku błędu cofnąć zmiany.
  • Logowałem błędy i informowałem zespół.
  • Przy krytycznych błędach cofałem migrację i analizowałem problem.
  • W trudnych przypadkach pisałem skrypty do ręcznej korekty danych.

Przykład migracji z Goose na Go:

package main

import (
    "database/sql"
    "github.com/pressly/goose/v3"
)

func Up(tx *sql.Tx) error {
    _, err := tx.Exec(`ALTER TABLE users ADD COLUMN age INT;`)
    return err
}

func Down(tx *sql.Tx) error {
    _, err := tx.Exec(`ALTER TABLE users DROP COLUMN age;`)
    return err
}

Taki sposób zapewnia kontrolę wersji i bezpieczeństwo zmian.