การเปลี่ยนชื่อคอลัมน์โดยไม่หยุดให้บริการ
เพิ่มคอลัมน์ใหม่ เขียนข้อมูลลงทั้งสองคอลัมน์ เติมข้อมูลย้อนหลัง เปลี่ยนไปอ่านจากคอลัมน์ใหม่ แล้วลบคอลัมน์เดิม — รูปแบบมาตรฐานสำหรับการเปลี่ยนชื่อโดยไม่หยุดให้บริการ
การเปลี่ยนชื่อคอลัมน์โดยไม่หยุดให้บริการ เป็นบทเรียน 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" จะทำงานล้มเหลว
กลยุทธ์: ขยาย → ย้ายข้อมูล → ตัดส่วนเกิน
รูปแบบมาตรฐานสำหรับการเปลี่ยนแปลงโดยไม่มีช่วงหยุดให้บริการ:
- ขยาย — เพิ่มคอลัมน์ใหม่โดยยังไม่ลบคอลัมน์เดิม
- ให้แอปพลิเคชันเขียนลงทั้งสองคอลัมน์ไปสักระยะ
- ย้ายข้อมูล — เติมข้อมูลย้อนหลังลงในคอลัมน์ใหม่
- เปลี่ยนให้การอ่านใช้คอลัมน์ใหม่
- ตัดส่วนเกิน — ลบคอลัมน์เดิม
ทีละขั้นตอน: เปลี่ยนชื่อ 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 ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- การย้ายข้อมูลแบบออนไลน์: เหตุผลที่ ALTER TABLE ล็อกตาราง
- ดัชนีแบบทำงานพร้อมกัน (CREATE INDEX CONCURRENTLY)
- การเปลี่ยนชื่อคอลัมน์โดยไม่หยุดให้บริการ
- เครื่องมือ: Flyway, Liquibase, Sqitch