Debian 13 ทำให้ PostgreSQL เสียหายเนื่องจากชื่อ Timezone US/* ที่ถูกยกเลิกการสนับสนุน

ทีมชุมชน BigGo
Debian 13 ทำให้ PostgreSQL เสียหายเนื่องจากชื่อ Timezone US/* ที่ถูกยกเลิกการสนับสนุน

ปัญหาความเข้ากันได้ที่สำคัญได้เกิดขึ้นสำหรับผู้ใช้ 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

อ้างอิง: Debian 13, Postgres, and the US/* time zones