Odłączanie i dołączanie partycji
Używać ATTACH PARTITION i DETACH PARTITION do dołączania i odłączania partycji bez blokowania odczytów
Odłączanie i dołączanie partycji 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.
Dlaczego odłączać?
Można wymienić starą partycję w działającej tabeli bez usuwania danych. Typowe zastosowania:
- Archiwizacja w osobnej bazie danych
- Przeniesienie na tańszą pamięć masową
- Wzorzec: kopia zapasowa, a następnie usunięcie
DETACH PARTITION
Usuwa partycję z tabeli nadrzędnej, ale zachowuje dane:
ALTER TABLE events DETACH PARTITION events_2022;
-- events_2022 is now a standalone table.
-- Queries on events no longer see those rows.DETACH CONCURRENTLY (PG 14+)
Unika blokady ACCESS EXCLUSIVE:
ALTER TABLE events DETACH PARTITION events_2022 CONCURRENTLY;
-- Two-step: detach pending, then finalize. App writes continue.Archiwizowanie odłączonych partycji
Po odłączeniu:
-- Backup with pg_dump:
pg_dump --table=events_2022 mydb > events_2022.sql
-- Move to a cold-storage Postgres or S3:
psql cold_db < events_2022.sql
-- Then drop from primary:
DROP TABLE events_2022;ATTACH PARTITION
Dodaje istniejącą tabelę jako nową partycję:
CREATE TABLE events_2025 (LIKE events INCLUDING ALL);
-- Load data with COPY or INSERT ... SELECT
ALTER TABLE events ATTACH PARTITION events_2025
FOR VALUES FROM ('2025-01-01') TO ('2026-01-01');Weryfikacja podczas ATTACH
ATTACH skanuje nową partycję, aby potwierdzić, że każdy wiersz mieści się w granicach FOR VALUES. Skanowania można uniknąć, dodając przed dołączeniem pasujące ograniczenie CHECK:
ALTER TABLE events_2025
ADD CONSTRAINT events_2025_ts_check
CHECK (ts >= '2025-01-01' AND ts < '2026-01-01');
ALTER TABLE events ATTACH PARTITION events_2025
FOR VALUES FROM ('2025-01-01') TO ('2026-01-01');
-- No scan needed; PG trusts the CHECK.Ruchome okna czasowe
Przesuwaj okno co tydzień lub co miesiąc: utwórz wcześniej następną partycję i usuń najstarszą:
BEGIN;
CREATE TABLE events_2024_q4 PARTITION OF events FOR VALUES FROM ('2024-10-01') TO ('2025-01-01');
DROP TABLE events_2023_q4;
COMMIT;Przełączanie warstw pamięci masowej
Odłącz partycję, wykonaj ALTER TABLE … SET TABLESPACE, aby przenieść ją na wolniejszą pamięć masową, a następnie dołącz ją ponownie:
ALTER TABLE events DETACH PARTITION events_2022;
ALTER TABLE events_2022 SET TABLESPACE archive_disk;
ALTER TABLE events ATTACH PARTITION events_2022 FOR VALUES FROM ('2022-01-01') TO ('2023-01-01');Indeksy na dołączanych partycjach
Aby partycja mogła zostać dołączona, jej indeksy muszą odpowiadać indeksom tabeli nadrzędnej. W PG 14+ podczas ATTACH PostgreSQL może automatycznie utworzyć brakujące indeksy.
Atomowa zamiana partycji
Umieść DETACH + ATTACH w transakcji, aby atomowo zamienić zawartość partycji. Typowy wzorzec polega na „zbudowaniu nowej partycji offline, a następnie zastąpieniu nią starej”:
BEGIN;
ALTER TABLE events DETACH PARTITION events_2024_q1;
ALTER TABLE events ATTACH PARTITION events_2024_q1_new
FOR VALUES FROM ...;
COMMIT;Wydajność
DETACH i ATTACH to operacje na katalogu systemowym — gdy ograniczenia są skonfigurowane wcześniej, wykonują się natychmiast. Sztuczka z ograniczeniem CHECK jest niezbędna przy dużej skali.
Podsumowanie
Odłączanie i dołączanie to tajna broń partycjonowania, umożliwiająca konserwację online.
- DETACH PARTITION CONCURRENTLY umożliwia usuwanie online
- Wstępnie dodane ograniczenie CHECK pomija skanowanie weryfikacyjne
- Zamiana, archiwizacja i przenoszenie między warstwami pamięci masowej
- Atomowość dzięki BEGIN/COMMIT
Szybkie sprawdzenie
Jak uniknąć pełnego skanowania tabeli podczas uruchamiania ATTACH PARTITION?
Często zadawane pytania
Czy lekcja „Odłączanie i dołączanie partycji” jest bezpłatna?
Tak — pełny tekst „Odłączanie i dołączanie partycji” 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 „Odłączanie i dołączanie partycji”?
Używać ATTACH PARTITION i DETACH PARTITION do dołączania i odłączania partycji bez blokowania odczytów Ć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 „Odłączanie i dołączanie partycji”?
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
- Dlaczego partycjonować: przycinanie i konserwacja
- Partycjonowanie zakresowe, listowe i haszujące
- Odłączanie i dołączanie partycji
- Wydajne wykonywanie zapytań obejmujących partycje