เมื่อกระผมต้องมาอัพเกรด 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 เอง และเพียงเท่านี้การอัพเกรดฐานข้อมูลของกระผมก็เสร็จสิ้น เย้!

กระผมขอขอบคุณ

)
Welcome to a place where words matter. On Medium, smart voices and original ideas take center stage - with no ads in sight. Watch
Follow all the topics you care about, and we’ll deliver the best stories for you to your homepage and inbox. Explore
Get unlimited access to the best stories on Medium — and support writers while you’re at it. Just $5/month. Upgrade