0Pricing
SQL Academy · Lekcja

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

  1. Dlaczego partycjonować: przycinanie i konserwacja
  2. Partycjonowanie zakresowe, listowe i haszujące
  3. Odłączanie i dołączanie partycji
  4. Wydajne wykonywanie zapytań obejmujących partycje
← Powrót do SQL Academy