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

การเปลี่ยนชื่อคอลัมน์โดยไม่หยุดให้บริการ

เพิ่มคอลัมน์ใหม่ เขียนข้อมูลลงทั้งสองคอลัมน์ เติมข้อมูลย้อนหลัง เปลี่ยนไปอ่านจากคอลัมน์ใหม่ แล้วลบคอลัมน์เดิม — รูปแบบมาตรฐานสำหรับการเปลี่ยนชื่อโดยไม่หยุดให้บริการ

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

วิธีการแบบง่าย ๆ ใช้ไม่ได้

ALTER TABLE t RENAME COLUMN a TO b; เปลี่ยนเฉพาะข้อมูลเมตา จึงทำงานได้รวดเร็ว แต่แอปพลิเคชันคาดว่าจะมีคอลัมน์ "a" หลังเปลี่ยนชื่อแล้ว query ทุกคำสั่งที่อ่าน "a" จะทำงานล้มเหลว

กลยุทธ์: ขยาย → ย้ายข้อมูล → ตัดส่วนเกิน

รูปแบบมาตรฐานสำหรับการเปลี่ยนแปลงโดยไม่มีช่วงหยุดให้บริการ:

  1. ขยาย — เพิ่มคอลัมน์ใหม่โดยยังไม่ลบคอลัมน์เดิม
  2. ให้แอปพลิเคชันเขียนลงทั้งสองคอลัมน์ไปสักระยะ
  3. ย้ายข้อมูล — เติมข้อมูลย้อนหลังลงในคอลัมน์ใหม่
  4. เปลี่ยนให้การอ่านใช้คอลัมน์ใหม่
  5. ตัดส่วนเกิน — ลบคอลัมน์เดิม

ทีละขั้นตอน: เปลี่ยนชื่อ user_name → full_name

คำอธิบายโดยละเอียด:

ขั้นตอนที่ 1 — เพิ่มคอลัมน์ใหม่

ทำงานแบบออนไลน์ โดยเปลี่ยนเฉพาะข้อมูลเมตาบน PG 11 ขึ้นไปเมื่อใช้ค่าเริ่มต้นคงที่:

ALTER TABLE users ADD COLUMN full_name VARCHAR(100);

ขั้นตอนที่ 2 — เขียนข้อมูลสองคอลัมน์

นำโค้ดที่เขียนลงในคอลัมน์ BOTH ไปใช้งาน:

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

ขั้นตอนที่ 3 — เติมข้อมูลย้อนหลัง

คัดลอกข้อมูลย้อนหลังเป็นชุด ๆ:

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.

ขั้นตอนที่ 4 — เพิ่ม NOT NULL แบบออนไลน์

หลังเติมข้อมูลย้อนหลังแล้ว ให้บังคับใช้ 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;

ขั้นตอนที่ 5 — เปลี่ยนคอลัมน์ที่ใช้ในการอ่าน

นำโค้ดที่อ่าน full_name แทน user_name ไปใช้งาน

ขั้นตอนที่ 6 — หยุดการเขียนสองคอลัมน์

นำโค้ดที่เขียนเฉพาะ full_name ไปใช้งาน

ขั้นตอนที่ 7 — ลบคอลัมน์เดิม

ทำงานแบบออนไลน์ โดยเปลี่ยนเฉพาะข้อมูลเมตา:

ALTER TABLE users DROP COLUMN user_name;

ข้อแลกเปลี่ยน: เวลาและความซับซ้อน

การเปลี่ยนชื่อแบบง่าย ๆ กลายเป็นการนำไปใช้งาน 4–7 ครั้งตลอดหลายวันหรือหลายสัปดาห์ สำหรับระบบจริงที่ไม่ใช่ระบบเรียบง่าย นี่คือเส้นทางที่ปลอดภัยเพียงทางเดียว

การเปลี่ยนชื่อตาราง

ใช้รูปแบบคล้ายกันแต่ทำได้ยากกว่า ใช้ VIEW เป็นชื่อแทนชั่วคราว:

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

สรุป

การเปลี่ยนชื่อคอลัมน์โดยไม่มีช่วงหยุดให้บริการต้องทำตามลำดับ ขยาย → ย้ายข้อมูล → ตัดส่วนเกิน

  • เพิ่มคอลัมน์ใหม่
  • เขียนข้อมูลสองคอลัมน์
  • เติมข้อมูลย้อนหลังเป็นชุด ๆ
  • เปลี่ยนคอลัมน์ที่ใช้ในการอ่าน
  • หยุดการเขียนคอลัมน์เดิม
  • ลบคอลัมน์เดิม

แบบทดสอบสั้น ๆ

ระยะใดเกิดขึ้น IMMEDIATELY หลังจากนำการเขียนลงทั้งคอลัมน์เดิมและคอลัมน์ใหม่ไปใช้งาน

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

บทเรียน “การเปลี่ยนชื่อคอลัมน์โดยไม่หยุดให้บริการ” ฟรีหรือไม่

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

คุณจะเรียนรู้อะไรในบทเรียน “การเปลี่ยนชื่อคอลัมน์โดยไม่หยุดให้บริการ”

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

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

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

บทเรียน “การเปลี่ยนชื่อคอลัมน์โดยไม่หยุดให้บริการ” ใช้เวลานานแค่ไหน

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

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

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

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

  1. การย้ายข้อมูลแบบออนไลน์: เหตุผลที่ ALTER TABLE ล็อกตาราง
  2. ดัชนีแบบทำงานพร้อมกัน (CREATE INDEX CONCURRENTLY)
  3. การเปลี่ยนชื่อคอลัมน์โดยไม่หยุดให้บริการ
  4. เครื่องมือ: Flyway, Liquibase, Sqitch
← กลับไปที่ SQL Academy