เมื่อกระผมต้องมาอัพเกรด PostgreSQL
สวัสดีครับ วันนี้กระผมนั้นได้รับมอบหมายให้อัพเกรดฐานข้อมูลของทีมพัตนาซอฟต์แวร์ ซึ่งเป็นฐานข้อมูล PostgreSQL เวอร์ชั่น 8.4.20 ที่รันอยู่บน CentOS 6 เมื่อกระผมไปหาข้อมูลในอินเตอร์เน็ต ( google ) พบว่าเป็นเวอร์ชั่นที่เลิกสนับสนุนไปนานแล้ว อัพเดทล่าสุดของเวอร์ชั่น 8.4 คือ 8.4.22 ออกมาเมื่อ 2014–07–24 ( เก่าไปไหน ) ตามข้อมูลจาก postgresql.org กระผมจึงเสนอว่าเราควรอัพเกรดให้เป็นเวอร์ชั่นปัจจุบันคือ 9.6 ทางหัวหน้าทีมก็ตกลงตามนั้น แต่ข้อมูล และ ผู้ใช้ต้องไม่หาย ต้องใช้กับแอพพลิเคชั่นที่ใช้อยู่ หรือพัฒนาอยู่ได้ นั่นแหล่ะครับคือความกดดันที่ไม่เจอในห้องเรียนแน่นอน
หลังจากรู้สึกถึงแรงกดดันแล้ว กระผมก็ไปหาข้อมูลในอินเตอร์เน็ตให้มั่นใจว่าจะไม่ทำระบบล่ม ก่อนอื่นเลยกระผมต้องทำให้ข้อมูลไม่หายไปไหน ก็คือการ backup นั่นเองซึ่ง ง่ายกว่าที่คิดไว้มากมาย
ก่อนอื่นเข้าใช้ user ที่เป็น admin ของ PostgreSQL ตามปกติคือ user ที่ชื่อ postgres (แต่ของกระผมไม่ปกติ ใช้ user ของพี่หัวหน้าทีมพัฒนา)
su - postgres
เมื่อเป็น admin แล้วให้ไปที่ directory ที่ต้องการเก็บไฟล์ backup แล้วใช้คำสั่ง
pg_dumpall > ชื่อไฟล์.sql
เมื่อกระผมทำการ dumpall แล้ว ก็จะได้ไฟล์ sql มา ซึ่งจะมีข้อมูลในฐานข้อมูลทั้งหมดรวมถึงผู้ใช้ด้วย ต่อมากระผมก็จะทำการปิด service ของ PostgreSQL ตัวเก่าก่อน
service postgresql stop
จากนั้นกระผมก็ทำการติดตั้ง PostgreSQL เวอร์ชั่น 9.6 โดยต้องติดตั้งที่อยู่ของแพคเกจก่อน โดยปกติจะสามารถใช้ sudo นำหน้าคำสั่งเพื่อให้ user ของผู้ที่ทำการติดตั้งใช้สิทธิ์ที่เป็น root ได้ แต่ระบบที่กระผมทำนั้นไม่ปกติ ต้องติดตั้งโดยใช้ root จึงไม่มี sudo นำหน้านะครับ
yum install https://download.postgresql.org/pub/repos/yum/9.6/redhat/rhel-6-x86_64/pgdg-centos96-9.6-3.noarch.rpm
แล้วค่อยติดตั้งตัว client และ server
yum install postgresql96
yum install postgresql96-server
แล้วกระผมก็ต้องเปิด service ของ postgresql ที่เพิ่งได้ติดตั้งไป
service postgresql-9.6 initdb
chkconfig postgresql-9.6 on
service postgresql-9.6 start
แล้วก็มาถึงขั้นตอนการเรียกคืนข้อมูลที่กระผม backup ไว้
sudo -u postgres psql < ชื่อไฟล์.sql
ถึงจะคืนค่าได้แล้วเค้าไปดูในฐานข้อมูลพบว่าข้อมูลอยู่ครบ แต่กระผมก็ไม่สามารถเรียกใช้ฐานข้อมูลจากภายนอก หรือผ่านทางแอพพลิเคชั่นที่กำลังพัฒนาอยู่ได้ ต้องมาตั้งค่าการเข้าถึงก่อน โดยใช้คำสั่ง
vim /var/lib/pgsql/9.4/data/postgresql.conf
แล้วเปลี่ยนค่าดังนี้
listen_addresses = ‘*’
port = 5432
และไฟล์
vim /var/lib/pgsql/9.4/data/pg_hba.conf
เปลี่ยนเป็นค่าเพื่อกำหนดวิธีการในการเข้าถึง
local all all trust
host all all 0.0.0.0/0 md5
host all all 127.0.0.1/32 trust
host all all localhost trust
เมื่อของใหม่ใช้ได้ ก็ต้องกำจัดของเก่าออกไป ถ้าปกติก็ใช้ yum โดย
yum remove postgresql
แต่ของกระผมไม่ปกติต้องไปลบไดเร็คทอรี่ที่ติดตั้งตัวเก่าเอง และลบไฟล์ service เอง และเพียงเท่านี้การอัพเกรดฐานข้อมูลของกระผมก็เสร็จสิ้น เย้!