0Pricing
SQL Academy · Lekcja

Zmiana nazw kolumn bez przestoju

Dodać nową kolumnę, zapisywać dane w obu kolumnach, uzupełnić dane historyczne, przełączyć odczyty i usunąć starą kolumnę — kanoniczny wzorzec zmiany nazwy bez przestoju

Zmiana nazw kolumn bez przestoju to bezpłatna lekcja SQL Academy na CoddyKit. To lekcja 3 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej SQL Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs SQL Academy zawiera 4 lekcji w sumie.

Naiwne podejście zawodzi

ALTER TABLE t RENAME COLUMN a TO b; zmienia tylko metadane, więc wykonuje się szybko. Jednak aplikacja oczekuje kolumny "a" — po zmianie nazwy każde zapytanie odczytujące "a" przestanie działać.

Strategia: Expand → Migrate → Contract

Standardowy wzorzec zapewniający brak przestoju:

  1. Expand — dodanie nowej kolumny bez usuwania starej
  2. Przez pewien czas aplikacja zapisuje dane do obu kolumn
  3. Migrate — uzupełnienie danych historycznych w nowej kolumnie
  4. Przełączenie odczytów na nową kolumnę
  5. Contract — usunięcie starej kolumny

Krok po kroku: zmiana nazwy user_name → full_name

Szczegółowy przewodnik:

Krok 1 — Dodanie nowej kolumny

Bez przestoju (tylko metadane w PG 11+ przy stałej wartości domyślnej):

ALTER TABLE users ADD COLUMN full_name VARCHAR(100);

Krok 2 — Podwójny zapis

Należy wdrożyć kod zapisujący dane do OBU kolumn:

// App writes to both:
UPDATE users SET user_name = $1, full_name = $1 WHERE id = $2;
INSERT INTO users (..., user_name, full_name) VALUES (..., $name, $name);

Krok 3 — Uzupełnienie danych

Dane historyczne należy kopiować partiami:

UPDATE users SET full_name = user_name
WHERE full_name IS NULL
  AND id IN (
    SELECT id FROM users WHERE full_name IS NULL LIMIT 10000
  );
-- Run in a loop until 0 rows affected.

Krok 4 — Dodanie NOT NULL (bez przestoju)

Po uzupełnieniu danych należy bezpiecznie wymusić NOT NULL:

ALTER TABLE users
  ADD CONSTRAINT fn_not_null CHECK (full_name IS NOT NULL) NOT VALID;
ALTER TABLE users VALIDATE CONSTRAINT fn_not_null;
ALTER TABLE users ALTER COLUMN full_name SET NOT NULL;
ALTER TABLE users DROP CONSTRAINT fn_not_null;

Krok 5 — Przełączenie odczytów

Należy wdrożyć kod odczytujący full_name zamiast user_name.

Krok 6 — Zakończenie podwójnych zapisów

Należy wdrożyć kod zapisujący dane wyłącznie do full_name.

Krok 7 — Usunięcie starej kolumny

Bez przestoju (tylko metadane):

ALTER TABLE users DROP COLUMN user_name;

Kompromis: czas i złożoność

Prosta zmiana nazwy przekształca się w 4–7 wdrożeń realizowanych przez kilka dni lub tygodni. W przypadku nietrywialnych systemów produkcyjnych jest to jedyna bezpieczna ścieżka.

Zmiana nazw tabel

Podobny wzorzec, ale trudniejszy. Należy użyć VIEW jako tymczasowego aliasu:

ALTER TABLE old_name RENAME TO new_name;
CREATE VIEW old_name AS SELECT * FROM new_name;
-- Deploy new code. Then drop the view.

Podsumowanie

Zmiana nazw kolumn bez przestoju przebiega zgodnie ze schematem Expand → Migrate → Contract.

  • Dodanie nowej kolumny
  • Podwójny zapis
  • Uzupełnienie danych partiami
  • Przełączenie odczytów
  • Zakończenie zapisów do starej kolumny
  • Usunięcie starej kolumny

Szybki test

Która faza następuje BEZPOŚREDNIO po wdrożeniu zapisów do obu, starej i nowej, kolumn?

Często zadawane pytania

Czy lekcja „Zmiana nazw kolumn bez przestoju” jest bezpłatna?

Tak — pełny tekst „Zmiana nazw kolumn bez przestoju” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu SQL Academy, przejdź na CoddyKit PRO. Kurs SQL Academy zawiera 4 lekcji w sumie.

Co nauczysz się w „Zmiana nazw kolumn bez przestoju”?

Dodać nową kolumnę, zapisywać dane w obu kolumnach, uzupełnić dane historyczne, przełączyć odczyty i usunąć starą kolumnę — kanoniczny wzorzec zmiany nazwy bez przestoju Ćwiczysz SQL Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.

Czy potrzebuję doświadczenia, aby zacząć SQL Academy?

Nie wymagamy żadnego doświadczenia. SQL Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 3 z 4.

Ile czasu zajmuje lekcja „Zmiana nazw kolumn bez przestoju”?

Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.

Czy mogę pisać i uruchamiać kod w tej lekcji SQL Academy?

Tak. Każda lekcja SQL Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.

Wszystkie lekcje w tym kursie

  1. Migracje online: dlaczego ALTER TABLE blokuje
  2. Indeksy współbieżne (CREATE INDEX CONCURRENTLY)
  3. Zmiana nazw kolumn bez przestoju
  4. Narzędzia: Flyway, Liquibase, Sqitch
← Powrót do SQL Academy