Skip to content

Cum să creezi migrări re-executabile în Flyway Teams

DodaTech Updated 2025-01-15 2 min read

In this tutorial, you'll learn about Cum să creezi migrări re. We cover key concepts, practical examples, and best practices.

Vei învăța cum să creezi și să gestionezi migrări re-executabile (repeatable) în Flyway Teams pentru views, stored procedures și functions care se actualizează automat la fiecare modificare.

Problema

View-urile și procedurile stocate se schimbă frecvent. Migrările obișnuite (V) rulează o singură dată. Pentru obiecte care trebuie actualizate la fiecare deploy, Flyway Teams oferă migrări repeatable (R) care se re-execută când conținutul se modifică.

Modul Greșit

-- V2__create_active_users_view.sql — migrare obișnuită
CREATE VIEW active_users AS
SELECT * FROM users WHERE status = 'active';
-- Când adaugi o coloană nouă, view-ul e învechit
-- Trebuie să creezi V3, V4... pentru fiecare modificare
-- V3__create_active_users_view_v2.sql
CREATE OR REPLACE VIEW active_users AS
SELECT id, name, email FROM users WHERE status = 'active';

Modul Corect

-- R__active_users_view.sql — migrare repeatable
CREATE OR REPLACE VIEW active_users AS
SELECT id, name, email, last_login
FROM users
WHERE status = 'active';
-- R__user_functions.sql — toate funcțiile într-un singur loc
CREATE OR REPLACE FUNCTION get_user_count()
RETURNS INTEGER AS $$
    SELECT COUNT(*) FROM users;
$$ LANGUAGE SQL;
flyway migrate

Output:

Current version of schema "public": 2
Migrating schema "public" to version 2 - add users table
Successfully applied 1 migration (execution time 00:00.123s)

Repeatable migrations not applied — no change detected

După modificarea R__active_users_view.sql:

Repeatable migration R__active_users_view.sql updated
Successfully applied 1 repeatable migration

Pas cu Pas

1. Denumește corect fișierele

db/migration/
  V1__create_users.sql
  V2__add_orders.sql
  R__active_users_view.sql
  R__user_functions.sql
  R__order_stats.sql

2. Scrie conținutul cu CREATE OR REPLACE

-- R__order_summary.sql
CREATE OR REPLACE VIEW order_summary AS
SELECT
    u.name,
    COUNT(o.id) as order_count,
    SUM(o.total) as total_spent
FROM users u
JOIN orders o ON u.id = o.user_id
GROUP BY u.name;

3. Rulează migrarea

flyway migrate
# Repeatable migrations se re-execută doar când checksum-ul se modifică

Sfaturi de Prevenție

  • Plasează view-urile și funcțiile ca migrări repeatable, tabelele ca migrări versionate
  • Folosește CREATE OR REPLACE în loc de CREATE în migrările repeatable
  • Grupează funcții înrudite în aceleași fișiere R
  • Verifică starea cu flyway info pentru a vedea când s-a executat ultima dată o migrare R

Greșeli Comune

  1. Folosirea CREATE în loc de CREATE OR REPLACE — a doua rulare eșuează cu obiect deja existent
  2. Migrări R care modifică tabele — repeatable nu track-uiesc coloanele adăugate; folosește V pentru DDL de tabele
  3. Dependențe între migrări R — Flyway nu garantează ordinea între migrări repeatable; separă-le
  4. Migrări R care expiră — dacă un view referențiază tabele care nu mai există, migrarea R eșuează

Întrebări Frecvente

### Care e diferența între V și R?

V (versioned) rulează o singură dată. R (repeatable) se re-execută la fiecare modificare a conținutului, detectată prin checksum.

Cum detectează Flyway că o migrare R s-a modificat?

Flyway calculează un checksum (SHA-512) al conținutului fișierului. Dacă checksum-ul diferă de cel din flyway_schema_history, migrarea se re-execută.

Pot avea migrări R care depind de V?

Da — migrările R se execută după toate migrările V. Deci poți referenția tabele create în V într-un view definit în R.

Construit de dezvoltătorii Doda Browser, DodaZIP și Durga Antivirus Pro. Instrumentele DodaTech se integrează perfect cu Flyway Teams pentru migrări re-executabile sigure.

Built by the developers of DodaTech

Doda Browser, DodaZIP & Durga Antivirus Pro