Peta dunia

 

EN: Read in English

Dunia C3: Lancar & Deploy

Ubah pangkalan data tanpa henti

Anda akan belajar: cara ubah pangkalan data langkah demi langkah semasa kod lama dan baharu berjalan bersama.

Teks BM belum disemak oleh penutur asli.

Disemak dengan GitHub Actions 2026-10 pada 31 Okt 2026

Masalahnya

psql
psql -c "SELECT phone FROM customers;"
ERROR: column "phone" does not exist
LINE 1: SELECT phone FROM customers;
^
Kod lama minta lajur phone. PostgreSQL kata lajur itu tak wujud.

Anda tukar nama lajur phone kepada mobile. Versi 2 okey. Tapi salinan versi 1 masih berjalan semasa rollout. Maksudnya: kod lama minta lajur yang dah tiada.

Tengok

Semasa deploy rolling atau canary, siapa yang baca dan tulis pangkalan data?

Pilih satu jawapan.

Tengok

Penyelesaiannya ialah expand dan contract (expand and contract): Ubah pangkalan data langkah demi langkah: tambah rak baharu, pindah stok, kemudian buang rak lama. Kod lama dan baharu terus berfungsi.. Ubah stor langkah demi langkah. Tambah rak baharu, pindah stok, kemudian buang rak lama. Susun langkahnya.

Langkah pertama di atas. Susun ikut turutan. Guna anak panah, atau seret.

  • Expand: tambah lajur baharu, mobile
  • Deploy kod yang guna mobile sahaja
  • Contract: buang lajur phone yang lama
  • Deploy kod yang tulis ke kedua-dua lajur
  • Migrate: salin nombor lama ke mobile

Cuba

Perubahan mana yang selamat dalam satu deploy? Susun.

Seret kad ke dalam kotak. Atau ketik kad, kemudian ketik kotak.

      Teka

      Anda di langkah 2: kedua-dua lajur wujud. Versi 2 ada bug. Boleh anda rollback ke versi 1?

      Pilih satu jawapan.

      Semak

      psql
      psql -c "ALTER TABLE customers ADD COLUMN mobile text;"
      ALTER TABLE
      psql -c "SELECT id, phone, mobile FROM customers;"
      id | phone | mobile
      ----+-------------+--------
      1 | 012-3456789 |
      (1 row)
      Tambah lajur mobile. Jadual kini ada id, phone dan mobile yang kosong.

      Langkah 1 betul-betul, pada PostgreSQL 18. ADD COLUMN tambah rak kosong. Kod lama masih baca phone. Kod baharu boleh mula tulis mobile.

      Anda berjaya!

      Kini anda boleh ubah pangkalan data tanpa tutup kedai.

      Nak tahu lebih (pilihan)

      Jalankan setiap migration sebagai langkah sendiri, sebelum kod yang memerlukannya. Sesetengah perubahan mengunci jadual besar semasa berjalan. Baca dokumentasi pangkalan data anda dulu. Ingat: rollback tukar kod, bukan data. Rollback Cloudflare biarkan pangkalan data dan binding lain seperti asal.

      Latihan sebenar (pilihan): cuba langkah ini pada pangkalan data pakai buang: docker run --rm -e POSTGRES_PASSWORD=test postgres:18-alpine.