โดยทั่วไปมีสามวิธีในการอัปเกรด PostgreSQL จากเวอร์ชันหลักต่าง ๆ (เช่น 9.1 ถึง 9.3)
การอัพเกรดด้วย pg_dump
สิ่งแรกและแนะนำถ้าเป็นไปได้คือทำการดัมพ์ของเวอร์ชันเก่า (9.1) โดยใช้ไบนารี่ของเวอร์ชันที่ใหม่กว่า (9.3)และเรียกคืนบนคลัสเตอร์ใหม่ที่สร้างขึ้นจากเวอร์ชันใหม่
โดยทั่วไปวิธีนี้จะช้ากว่า แต่ก็เป็นไปได้มากที่สุด หนึ่งเคล็ดลับที่จะทำให้มันเร็วขึ้นคือใช้การทำงานพร้อมกัน หากต้องการดัมพ์กับงานแบบขนานคุณสามารถทำ:
$ pg_dump --format=directory --jobs=4 --no-synchronized-snapshots --file=/path/to/mydump mydatabase
คุณจะต้องทำสำหรับแต่ละฐานข้อมูลที่คุณมีอยู่ปรับ--jobs=4
ค่าเป็นค่าใด ๆ (ทดสอบค่าบางค่าจาก 2 ถึงจำนวนแกนและดูว่าจะให้ความเร็วใดดีกว่า) นอกจากนี้ในระหว่างขั้นตอนนี้ไม่มีใครควรเชื่อมโยงกับฐานข้อมูลการดัดแปลงใด ๆ จะส่งผลให้เกิดการถ่ายโอนข้อมูลที่เสียหาย (เนื่องจากตัวเลือกที่ไม่ปลอดภัย--no-synchronized-snapshots
)
หลังจากนั้นคุณสามารถเรียกคืนคุณถ่ายโอนข้อมูลลงในอินสแตนซ์ใหม่โดยใช้pg_restore
:
$ createdb <options> -T template0 mydatabase
$ pg_restore --exit-on-error --jobs=4 --dbname=mydatabase /path/to/mydump
หลังจากนั้นขอแนะนำให้รันANALYZE
บนฐานข้อมูลของคุณ:
$ vacuumdb --analyze-only mydatabase
(ถ้าคุณสามารถจ่ายได้เวลาทำงานเฉพาะ--analyze
ยังVACUUM
ฐานข้อมูลและการปรับปรุงการมองเห็นแผนที่)
การอัปเกรดด้วย pg_upgrade
อีกตัวเลือกหนึ่งคือการใช้contrib pg_upgrade
ใช้--link
วิธีการนี้เป็นวิธีที่รวดเร็วในการอัปเกรด PostgreSQL
ก่อนที่จะใช้คุณต้องสำรองข้อมูลของไดเรกทอรีข้อมูลทั้งหมดเพราะใน--link
โหมดหากมีสิ่งผิดปกติคุณอาจสูญเสียข้อมูลทั้งเก่าและใหม่ นอกจากนี้อ่านเอกสารทั้งหมดและบันทึกพิเศษที่ด้านล่าง (มีข้อ จำกัด บางประการสำหรับ pg_upgrade)
อัปเดต: โปรดใช้--check
ตัวเลือกก่อนเรียกใช้คำสั่งที่ชัดเจน นอกจากนี้สำหรับฐานข้อมูลขนาดใหญ่แนะนำให้รันคำสั่งนี้ในเซสชันหน้าจอ
อัปเกรดโดยใช้เครื่องมือจำลองแบบตามทริกเกอร์
อีกทางเลือกหนึ่งในการอัปเกรดเวอร์ชันคือการใช้เครื่องมือจำลองข้อมูลตามทริกเกอร์ เช่น Slony, Bucardo และ Londiste
นี่คือตัวเลือกที่ต้องการการหยุดทำงานน้อยที่สุดเท่าที่จะเป็นไปได้ แต่เป็นวิธีที่ยากที่สุดในการทำงาน
ในการทำเช่นนั้นคุณจะต้องสร้าง master-slave โดยที่ master เป็นเวอร์ชันปัจจุบันของคุณ (9.1) และ slave เป็นเวอร์ชันใหม่ (9.3) จากนั้นรอการซิงค์ครั้งแรก (ขณะที่ระบบยังอยู่ในระหว่างการผลิต) หลังจากนั้นคุณปิดทุกคนที่เชื่อมต่อกับฐานข้อมูล (การหยุดทำงานเริ่มต้นที่นี่) รอให้สลาฟจับภาพเลื่อนขึ้น (ทาส) เป็นหลักและ เปลี่ยนเส้นทางไคลเอนต์ / แอปพลิเคชันทั้งหมดไปเป็นเวอร์ชั่นใหม่นี้ และคุณทำเสร็จแล้ว
เอกสาร Slony มีขั้นตอนโดยขั้นตอนในการอัพเกรด PostgreSQL ใช้ Slony
เลือกแบบไหน
เช่นเคยขึ้นอยู่กับการกลับมาทำงานต่อ:
- การถ่ายโอนข้อมูล + การคืนค่าเป็นที่น่าเชื่อถือที่สุด แต่โดยทั่วไปช้าที่สุด (การขนานกันสามารถให้ผลลัพธ์ที่ค่อนข้างดี)
- pg_upgrade เป็นหนึ่งในตัวเลือกที่ดีที่สุดสำหรับการหยุดทำงานเล็ก ๆ น้อย ๆ (ถ้าคุณสามารถใช้ดูข้อ จำกัด ) มันมักจะใช้เวลาเพียงไม่กี่นาทีแม้สำหรับฐานข้อมูลขนาดใหญ่
- การจำลองแบบทริกเกอร์นั้นไม่ต้องสงสัยเลยว่าจะช่วยให้การหยุดทำงานน้อยที่สุด (ใกล้ศูนย์) แต่เป็นการยากที่จะบรรลุผลและฉันขอแนะนำสำหรับผู้ที่มีประสบการณ์เท่านั้น (ทั้ง PostgreSQL และเครื่องมือการจำลองแบบ)
ฉันหวังว่าฉันจะช่วย โชคดี.