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:
- Expand — dodanie nowej kolumny bez usuwania starej
- Przez pewien czas aplikacja zapisuje dane do obu kolumn
- Migrate — uzupełnienie danych historycznych w nowej kolumnie
- Przełączenie odczytów na nową kolumnę
- 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
- Migracje online: dlaczego ALTER TABLE blokuje
- Indeksy współbieżne (CREATE INDEX CONCURRENTLY)
- Zmiana nazw kolumn bez przestoju
- Narzędzia: Flyway, Liquibase, Sqitch