अपडेट : यह प्रक्रिया 9.5 को कम से कम 11.5 के माध्यम से अपग्रेड करने के लिए समान है; बस आदेशों संस्करणों को प्रतिबिंबित करने के संशोधित 9.6
और 10
, जहां 9.6
है पुराने संस्करण और 10
है नया संस्करण। तदनुसार, "पुराने" और "नए" निर्देशिकाओं को समायोजित करना सुनिश्चित करें।
मैंने Ubuntu पर सिर्फ PostgreSQL 9.5 को 9.6 में अपग्रेड किया और सोचा कि मैं अपने निष्कर्षों को साझा करूंगा, क्योंकि ओएस के कुछ जोड़े / पैकेज-विशिष्ट बारीकियों के बारे में जानते हैं।
( मैं मैन्युअल रूप से डेटा को डंप और पुनर्स्थापित करना नहीं चाहता था , इसलिए यहां कई अन्य उत्तर व्यवहार्य नहीं थे।)
संक्षेप में, प्रक्रिया में पुराने संस्करण के साथ PostgreSQL के नए संस्करण को स्थापित करना शामिल है (जैसे, 9.5 और 9.6), और फिर pg_upgrade
बाइनरी को चलाना , जिसमें (कुछ) विवरण https://www.postgresql.org/ पर बताया गया है डॉक्स / 9.6 / स्थिर / pgupgrad.html ।
इसका केवल "मुश्किल" पहलू pg_upgrade
यह है कि किसी तर्क के लिए सही मान पास करने में विफलता या सही उपयोगकर्ता के रूप में लॉग-इन करने में विफलता।cd
किसी कमांड को निष्पादित करने से पहले सही स्थान पर, क्रिप्टिक त्रुटि संदेशों को जन्म दे सकता है।
उबंटू (और शायद डेबियन) पर, बशर्ते आप "आधिकारिक" रेपो का उपयोग कर रहे हों, deb http://apt.postgresql.org/pub/repos/apt/ xenial-pgdg main
, और बशर्ते आपने डिफ़ॉल्ट फाइल सिस्टम पथ या रनटाइम विकल्प को नहीं बदला है, तो निम्न कार्य को करना चाहिए।
नया संस्करण स्थापित करें (ध्यान दें कि हम 9.6
स्पष्ट रूप से निर्दिष्ट करें ):
sudo apt install postgresql-9.6
एक बार इंस्टॉलेशन सफल होने के बाद, दोनों संस्करण अगल-बगल, लेकिन अलग-अलग पोर्ट पर चलेंगे। इंस्टॉलेशन आउटपुट में इसका उल्लेख है, तल पर, लेकिन इसे अनदेखा करना आसान है:
Creating new cluster 9.6/main ...
config /etc/postgresql/9.6/main
data /var/lib/postgresql/9.6/main
locale en_US.UTF-8
socket /var/run/postgresql
port 5433
दोनों सर्वर इंस्टेंस को रोकें (यह एक ही समय में दोनों को रोक देगा):
sudo systemctl stop postgresql
समर्पित PostgreSQL सिस्टम उपयोगकर्ता पर स्विच करें:
su postgres
अपने घर निर्देशिका में ले जाएं (ऐसा करने में विफलता त्रुटियों का कारण बनेगी):
cd ~
pg_upgrade
निम्नलिखित जानकारी की आवश्यकता है ( pg_upgrade --help
हमें यह बताता है):
When you run pg_upgrade, you must provide the following information:
the data directory for the old cluster (-d DATADIR)
the data directory for the new cluster (-D DATADIR)
the "bin" directory for the old version (-b BINDIR)
the "bin" directory for the new version (-B BINDIR)
ये इनपुट "लंबे नामों" के साथ निर्दिष्ट किए जा सकते हैं, जिससे उन्हें कल्पना करना आसान हो जाए:
-b, --old-bindir=BINDIR old cluster executable directory
-B, --new-bindir=BINDIR new cluster executable directory
-d, --old-datadir=DATADIR old cluster data directory
-D, --new-datadir=DATADIR new cluster data directory
हमें --new-options
स्विच को भी पास करना होगा , क्योंकि ऐसा करने में विफलता निम्न में से होती है:
connection to database failed: could not connect to server: No such file or directory
Is the server running locally and accepting
connections on Unix domain socket "/var/lib/postgresql/.s.PGSQL.50432"?
ऐसा इसलिए होता है क्योंकि इस स्विच की अनुपस्थिति में डिफ़ॉल्ट कॉन्फ़िगरेशन विकल्प लागू होते हैं, जिसके परिणामस्वरूप गलत कनेक्शन विकल्प का उपयोग किया जाता है, इसलिए सॉकेट त्रुटि।
नए PostgreSQL संस्करण pg_upgrade
से कमांड निष्पादित करें :
/usr/lib/postgresql/9.6/bin/pg_upgrade --old-bindir=/usr/lib/postgresql/9.5/bin --new-bindir=/usr/lib/postgresql/9.6/bin --old-datadir=/var/lib/postgresql/9.5/main --new-datadir=/var/lib/postgresql/9.6/main --old-options=-cconfig_file=/etc/postgresql/9.5/main/postgresql.conf --new-options=-cconfig_file=/etc/postgresql/9.6/main/postgresql.conf
समर्पित प्रणाली उपयोगकर्ता खाते का लॉगआउट:
exit
उन्नयन अब पूरा हो गया है, लेकिन , नया उदाहरण पोर्ट 5433
(मानक डिफ़ॉल्ट 5432
) के लिए बाध्य होगा , इसलिए इसे "कट-ओवर" से पहले नए उदाहरण का परीक्षण करने का प्रयास करते समय इसे ध्यान में रखें।
सर्वर को सामान्य के रूप में प्रारंभ करें (फिर से, यह पुराने और नए उदाहरण दोनों को शुरू करेगा):
systemctl start postgresql
यदि आप नए संस्करण को डिफ़ॉल्ट बनाना चाहते हैं, तो आपको प्रभावी कॉन्फ़िगरेशन फ़ाइल, जैसे /etc/postgresql/9.6/main/postgresql.conf
, और यह सुनिश्चित करना होगा कि पोर्ट को इस तरह परिभाषित किया गया है:
port = 5432
यदि आप ऐसा करते हैं, या तो पुराने संस्करण के पोर्ट नंबर को 5433
उसी समय (सेवाओं को शुरू करने से पहले) बदल दें, या, बस पुराने संस्करण को हटा दें (यह आपकी वास्तविक डेटाबेस सामग्री को नहीं हटाएगा; आपको apt --purge remove postgresql-9.5
ऐसा होने के लिए उपयोग करने की आवश्यकता होगी; ):
apt remove postgresql-9.5
उपरोक्त आदेश सभी उदाहरणों को रोक देगा, इसलिए आपको एक बार अंतिम बार नया उदाहरण प्रारंभ करना होगा:
systemctl start postgresql
नोट के अंतिम बिंदु के रूप में, pg_upgrade
अच्छी सलाह पर विचार करना न भूलें :
Upgrade Complete
----------------
Optimizer statistics are not transferred by pg_upgrade so,
once you start the new server, consider running:
./analyze_new_cluster.sh
Running this script will delete the old cluster's data files:
./delete_old_cluster.sh