0Pricing
SQL Academy · บทเรียน

การถอดและแนบพาร์ทิชัน

ใช้ ATTACH PARTITION และ DETACH PARTITION เพื่อเพิ่มหรือนำพาร์ทิชันออกโดยไม่บล็อกการอ่าน

การถอดและแนบพาร์ทิชัน เป็นบทเรียน SQL Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 3 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน SQL Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส SQL Academy มีบทเรียนทั้งหมด 4 บทเรียน

เหตุใดจึงใช้ DETACH

คุณสามารถนำพาร์ติชันเก่าออกจากตารางที่ใช้งานอยู่ได้โดยไม่ลบข้อมูล การใช้งานที่พบบ่อยมีดังนี้:

  • เก็บถาวรไว้ในฐานข้อมูลแยกต่างหาก
  • ย้ายไปยังพื้นที่จัดเก็บที่มีราคาถูกกว่า
  • สำรองข้อมูลแล้วจึงลบ

DETACH PARTITION

นำพาร์ติชันออกจากตารางแม่ แต่ยังคงเก็บข้อมูลไว้:

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+)

หลีกเลี่ยงล็อก ACCESS EXCLUSIVE:

ALTER TABLE events DETACH PARTITION events_2022 CONCURRENTLY;
-- Two-step: detach pending, then finalize. App writes continue.

การเก็บพาร์ติชันที่ถอดออก

หลังจากถอดพาร์ติชันแล้ว:

-- 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

เพิ่มตารางที่มีอยู่แล้วให้เป็นพาร์ติชันใหม่:

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');

การตรวจสอบระหว่าง ATTACH

ATTACH จะสแกนพาร์ติชันใหม่เพื่อยืนยันว่าแต่ละแถวอยู่ภายในขอบเขต FOR VALUES หลีกเลี่ยงการสแกนนี้ได้โดยสร้างข้อจำกัด CHECK ที่ตรงกันไว้ก่อน ATTACH:

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.

หน้าต่างเวลาที่เลื่อนไปเรื่อย ๆ

เลื่อนช่วงเวลาไปข้างหน้าทุกสัปดาห์หรือทุกเดือน โดยสร้างพาร์ติชันถัดไปไว้ล่วงหน้า แล้วลบพาร์ติชันที่เก่าที่สุด:

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;

การสลับระดับพื้นที่จัดเก็บ

ถอดพาร์ติชันออก ใช้ ALTER TABLE … SET TABLESPACE เพื่อย้ายไปยังพื้นที่จัดเก็บที่ช้าลง แล้วจึง ATTACH กลับ:

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');

ดัชนีบนพาร์ติชันที่แนบ

หากต้องการแนบพาร์ติชัน ดัชนีของพาร์ติชันนั้นต้องตรงกับดัชนีของตารางแม่ PG สามารถสร้างดัชนีที่ขาดหายโดยอัตโนมัติระหว่าง ATTACH ได้ตั้งแต่ PG 14 เป็นต้นไป

การสลับพาร์ติชันแบบอะตอมิก

ครอบ DETACH + ATTACH ไว้ในธุรกรรมเดียวกันเพื่อสลับเนื้อหาของพาร์ติชันแบบอะตอมิก รูปแบบที่ใช้บ่อยคือ "สร้างพาร์ติชันใหม่แบบออฟไลน์ แล้วจึงแทนที่":

BEGIN;
  ALTER TABLE events DETACH PARTITION events_2024_q1;
  ALTER TABLE events ATTACH PARTITION events_2024_q1_new
    FOR VALUES FROM ...;
COMMIT;

ประสิทธิภาพ

DETACH และ ATTACH เป็นการดำเนินการกับแค็ตตาล็อก จึงทำได้ทันทีเมื่อกำหนดข้อจำกัดไว้ล่วงหน้า เทคนิคข้อจำกัด CHECK นี้สำคัญอย่างยิ่งเมื่อใช้งานในระดับใหญ่

สรุป

การถอดและแนบพาร์ติชันเป็นเครื่องมือสำคัญสำหรับการบำรุงรักษาแบบออนไลน์

  • ใช้ DETACH PARTITION CONCURRENTLY เพื่อนำพาร์ติชันออกแบบออนไลน์
  • ข้อจำกัด CHECK ที่สร้างไว้ก่อน ATTACH จะข้ามการสแกนเพื่อตรวจสอบ
  • ใช้สำหรับการสลับ การเก็บถาวร และการย้ายระดับพื้นที่จัดเก็บ
  • ทำให้เป็นอะตอมิกได้ด้วย BEGIN/COMMIT

ตรวจสอบความเข้าใจ

คุณจะหลีกเลี่ยงการสแกนทั้งตารางเมื่อเรียกใช้ ATTACH PARTITION ได้อย่างไร

คำถามที่พบบ่อย

บทเรียน “การถอดและแนบพาร์ทิชัน” ฟรีหรือไม่

ใช่ — ข้อความเต็มของ “การถอดและแนบพาร์ทิชัน” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส SQL Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส SQL Academy มีบทเรียนทั้งหมด 4 บทเรียน

คุณจะเรียนรู้อะไรในบทเรียน “การถอดและแนบพาร์ทิชัน”

ใช้ ATTACH PARTITION และ DETACH PARTITION เพื่อเพิ่มหรือนำพาร์ทิชันออกโดยไม่บล็อกการอ่าน คุณปฏิบัติ SQL Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน

คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน SQL Academy หรือไม่

ไม่จำเป็นต้องมีประสบการณ์มาก่อน SQL Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 3 จากทั้งหมด 4 บทเรียน

บทเรียน “การถอดและแนบพาร์ทิชัน” ใช้เวลานานแค่ไหน

บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย

ฉันเขียนและรันโค้ดในบทเรียน SQL Academy นี้ได้ไหม

ได้ บทเรียน SQL Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. เหตุผลที่ต้องแบ่งพาร์ทิชัน: การตัดส่วนและการดูแลรักษา
  2. การแบ่งพาร์ทิชันแบบช่วง รายการ และแฮช
  3. การถอดและแนบพาร์ทิชัน
  4. การค้นหาข้ามพาร์ทิชันอย่างมีประสิทธิภาพ
← กลับไปที่ SQL Academy