ปัญหาความเข้ากันได้ที่สำคัญได้เกิดขึ้นสำหรับผู้ใช้ PostgreSQL ที่อัปเกรดเป็น Debian 13 โดยเฉพาะอย่างยิ่งส่งผลกระทบต่อผู้ใช้ในทวีปอเมริกาที่พึ่งพาการกำหนดค่า timezone แบบเก่า US/*ปัญหานี้เกิดจากการตัดสินใจของ Debian ที่จะย้ายชื่อ timezone ที่ถูกยกเลิกการสนับสนุนไปยังแพ็กเกจแยกต่างหาก ทำให้ PostgreSQL ไม่สามารถเริ่มต้นระบบได้พร้อมกับข้อผิดพลาดในการกำหนดค่า
รากเหง้าของปัญหาย้อนกลับไปหลายทศวรรษ
ปัญหานี้สามารถติดตามย้อนกลับไปถึงการเปลี่ยนแปลงในฐานข้อมูล timezone ของ Internet Assigned Numbers Authority (IANA) ตั้งแต่ช่วงทศวรรษ 1990 เดิมที timezone ใช้ชื่อเช่น US/Pacific และ US/Eastern แต่แนวทางการตั้งชื่อได้เปลี่ยนเป็นรูปแบบทวีป/เมือง เช่น America/Los_Angeles และ America/New_York ชื่อ US/* แบบเก่าได้ถูกทำเครื่องหมายว่าถูกยกเลิกการสนับสนุนตั้งแต่ปี 1995 และถูกย้ายไปยังไฟล์ backward compatibility ในฐานข้อมูล timezone
สมาชิกชุมชนชี้ให้เห็นว่าการยกเลิกการสนับสนุนนี้ได้รับการจัดทำเอกสารมาเกือบสามทศวรรษแล้ว อย่างไรก็ตาม ชื่อแบบเก่ายังคงถูกใช้งานอย่างแพร่หลายเนื่องจากลักษณะที่เข้าใจง่ายและความจริงที่ว่าพวกมันยังคงทำงานได้โดยไม่มีคำเตือนที่มองเห็นได้สำหรับผู้ใช้
ชื่อ Timezone ที่ได้รับผลกระทบ
- US/Pacific → America/Los_Angeles
- US/Eastern → America/New_York
- US/Central → America/Chicago
- US/Mountain → America/Denver
- Canada/→ America/ equivalents
- ชื่อ timezone แบบเดิมที่อิงตามประเทศอื่นๆ
ความล้มเหลวแบบเงียบๆ และเอกสารที่หายไป
สิ่งที่ทำให้ปัญหานี้มีปัญหาเป็นพิเศษคือการขาดคำเตือนที่เด่นชัดในระหว่างกระบวนการอัปเกรด ผู้ใช้รายงานว่า PostgreSQL เพียงแค่ไม่สามารถเริ่มต้นได้พร้อมกับข้อความแสดงข้อผิดพลาดที่ไม่ชัดเจนเกี่ยวกับพารามิเตอร์ timezone ที่ไม่ถูกต้อง และปัญหานี้ไม่ได้รับการกล่าวถึงใน release notes ของ Debian 13 สิ่งนี้ทำให้เกิดความหงุดหงิดในหมู่ผู้ดูแลระบบที่คาดหวังการสื่อสารที่ดีกว่าเกี่ยวกับการเปลี่ยนแปลงที่ทำลายระบบ
ชุมชนได้สังเกตเห็นช่องว่างในเอกสารที่คล้ายกันในการอัปเกรด Debian อื่นๆ โดยผู้ใช้บางคนถูกบอกให้ตรวจสอบไฟล์ NEWS ของแพ็กเกจแต่ละตัวแทนที่จะพึ่งพา release notes ที่ครอบคลุม แนวทางนี้สร้างภาระที่ไม่สมเหตุสมผลให้กับผู้ใช้ในการติดตามปัญหาที่อาจเกิดขึ้นในแพ็กเกจหลายสิบตัว
โซลูชันที่ใช้ได้จริงและวิธีแก้ไขชั่วคราว
สำหรับผู้ใช้ที่ได้รับผลกระทบ มีโซลูชันหลายอย่าง การแก้ไขที่ง่ายที่สุดคือการติดตั้งแพ็กเกจ tzdata-legacy
ซึ่งจะคืนการสนับสนุนสำหรับชื่อ timezone แบบเก่า อีกทางหนึ่ง ผู้ใช้สามารถอัปเดตการกำหนดค่า PostgreSQL ของตนเพื่อใช้ชื่อ timezone สมัยใหม่ America/แทนที่จะใช้ US/ ที่ถูกยกเลิกการสนับสนุน
ผู้ดูแลระบบสามารถใช้คำสั่ง timedatectl list-timezones
เพื่อดูชื่อ timezone ที่ใช้ได้ทั้งหมดในระบบ Debian 13 ของตน สิ่งนี้ช่วยระบุตัวเทียบเท่าสมัยใหม่ที่ถูกต้องสำหรับการกำหนดค่า timezone แบบเก่าใดๆ
คำสั่งแก้ไขด่วน
ติดตั้งการรองรับ timezone แบบเดิม
apt install tzdata-legacy
แสดงรายการ timezone ที่ใช้ได้
timedatectl list-timezones
ตรวจสอบ timezone ปัจจุบัน
timedatectl status
แนวทางปฏิบัติที่ดีที่สุดสำหรับการกำหนดค่าเซิร์ฟเวอร์
เหตุการณ์นี้ได้กระตุ้นการอภิปรายใหม่เกี่ยวกับการจัดการ timezone ในสภาพแวดล้อมเซิร์ฟเวอร์ ผู้ดูแลระบบที่มีประสบการณ์หลายคนแนะนำให้เรียกใช้ระบบ production ใน timezone UTC เพื่อหลีกเลี่ยงปัญหา timezone ในภูมิภาคเหล่านี้ทั้งหมด แนวทางนี้ขจัดปัญหาที่เกี่ยวข้องกับเวลาทั้งหมดในขณะที่สร้างความไม่สะดวกเพียงเล็กน้อยสำหรับการแสดงเวลาท้องถิ่น
เรียกใช้ระบบ production ใน timezone Etc/UTC เสมอ สิ่งนี้ขจัดปัญหาทั้งหมดในขณะที่สร้างความไม่สะดวกเพียงเล็กน้อยเท่านั้น
สำหรับระบบเดสก์ท็อปและแอปพลิเคชันที่ต้องการการแสดงเวลาท้องถิ่น timezone สามารถจัดการได้ในระดับ user interface แทนที่จะเป็นระดับระบบ ให้ความยืดหยุ่นที่ดีกว่าสำหรับการปรับใช้หลายภูมิภาค
ปัญหา timezone ของ PostgreSQL ทำหน้าที่เป็นเครื่องเตือนใจว่าแม้แต่ฟีเจอร์ที่ถูกยกเลิกการสนับสนุนที่มีการสร้างมาอย่างดีก็สามารถก่อให้เกิดปัญหาจริงในที่สุด แม้ว่าระยะเวลาการยกเลิกการสนับสนุน 30 ปีอาจดูเหมือนเพียงพอ แต่การขาดคำเตือนที่มองเห็นได้และเอกสารการอัปเกรดที่ครอบคลุมทำให้ผู้ใช้หลายคนตกใจในระหว่างการย้ายข้อมูลไปยัง Debian 13