จะอัพเกรด PostgreSQL จากเวอร์ชั่น 9.6 เป็น 10.1 ได้อย่างไร?


207

ฉันใช้ฐานข้อมูล PostgreSQL สำหรับแอปพลิเคชัน Ruby on Rails ของฉัน (บน Mac OS X 10.9)

มีคำแนะนำโดยละเอียดเกี่ยวกับวิธีอัปเกรดฐานข้อมูล PostgreSQL หรือไม่

ฉันเกรงว่าจะทำลายข้อมูลในฐานข้อมูลหรือทำให้เป็นระเบียบ


8
ทำการสำรองข้อมูลในทุกกรณี
Patrick Oscity

คำตอบ:


401

สมมติว่าคุณใช้ home-brew เพื่อติดตั้งและอัปเกรด Postgres คุณสามารถทำตามขั้นตอนต่อไปนี้

  1. หยุดเซิร์ฟเวอร์ Postgres ปัจจุบัน:

    launchctl unload ~/Library/LaunchAgents/homebrew.mxcl.postgresql.plist

  2. เริ่มต้นฐานข้อมูล 10.1 ใหม่:

    initdb /usr/local/var/postgres10.1 -E utf8

  3. ทำงานpg_upgrade (หมายเหตุ: เปลี่ยนเวอร์ชั่นถังขยะหากคุณกำลังอัพเกรดจากรุ่นอื่นที่ไม่ใช่ด้านล่าง) :

    pg_upgrade -v \
        -d /usr/local/var/postgres \
        -D /usr/local/var/postgres10.1 \
        -b /usr/local/Cellar/postgresql/9.6.5/bin/ \
        -B /usr/local/Cellar/postgresql/10.1/bin/

    -v เพื่อเปิดใช้งานการบันทึกภายในแบบละเอียด

    -d ไดเร็กทอรีการกำหนดค่าคลัสเตอร์ฐานข้อมูลเก่า

    -D ไดเร็กทอรีการกำหนดค่าคลัสเตอร์ฐานข้อมูลใหม่

    -b ไดเรคทอรี่เก่าของ PostgreSQL

    -B ไดเรกทอรีปฏิบัติการใหม่ของ PostgreSQL

  4. ย้ายข้อมูลใหม่เข้าที่:

    cd /usr/local/var
    mv postgres postgres9.6
    mv postgres10.1 postgres
  5. เริ่ม Postgres ใหม่:

    launchctl load ~/Library/LaunchAgents/homebrew.mxcl.postgresql.plist

  6. ตรวจสอบ/usr/local/var/postgres/server.logรายละเอียดและตรวจสอบว่าเซิร์ฟเวอร์ใหม่เริ่มต้นอย่างถูกต้อง

  7. สุดท้ายติดตั้ง Rails pggem ใหม่อีกครั้ง

    gem uninstall pg
    gem install pg

ฉันขอแนะนำให้คุณใช้เวลาอ่านเอกสาร PostgreSQLเพื่อทำความเข้าใจสิ่งที่คุณทำในขั้นตอนข้างต้นเพื่อลดความผิดหวัง


8
ฉันลังเลที่จะใช้คำสั่งต่อไปนี้เพื่อเริ่มต้นฐานข้อมูล:initdb /usr/local/var/postgres9.4 -E utf8 --lc-collate=C --lc-ctype=utf-8 --lc-monetary=C --lc-numeric=C
sunsations

มันทำตามคำแนะนำของคุณทีละขั้นตอน และทุกอย่างทำงาน! ขอบคุณมาก.
Trantor Liu

3
ระวังด้วยdelete_old_cluster.shคำสั่ง ฉันได้ลบไดเรกทอรี /usr/local/postgres9.3 ด้วยตนเองก่อนที่จะรันคำสั่งนี้และดูเหมือนว่าฉันจะสูญเสียไดเรกทอรี / usr / local / var / postgres ทั้งหมด (ฉันสามารถกู้คืนได้จาก Time Machine)
peter_v

1
หากคุณกำลังใช้ Bundler คุณควรลบอัญมณีโดยใช้gem uninstall pgแต่แล้วให้ Bundler ติดตั้งรุ่นที่ถูกต้องจาก Gemfile.lock bundleโดยเพียงแค่การทำงาน
danielricecodes

1
ปรับปรุงไมเนอร์: brewตอนนี้ยังมีตัวเลือกที่จะใช้brew services stop postgresqlและbrew services start postgresqlโดยตรงแทนการโทรและlaunchctl unload launchctl load
florish

59

แม้จะมีคำตอบทั้งหมดข้างต้นนี่ไป 5 เซ็นต์ของฉัน

มันทำงานบนระบบปฏิบัติการใด ๆ และจากรุ่น postgres any-to-any

  • หยุดการทำงานของ postgres ที่กำลังทำงานอยู่
  • ติดตั้งเวอร์ชันใหม่และเริ่มต้น; ตรวจสอบว่าคุณสามารถเชื่อมต่อกับเวอร์ชั่นใหม่ได้หรือไม่;
  • เปลี่ยนเวอร์ชั่นเก่าของpostgresql.conf-> portจาก5432เป็น5433;
  • เริ่มอินสแตนซ์ postgres เวอร์ชันเก่า
  • เปิดเทอร์มินัลและcdไปยังbinโฟลเดอร์เวอร์ชั่นใหม่
  • วิ่ง pg_dumpall -p 5433 -U <username> | psql -p 5432 -U <username>
  • หยุดการทำงานของ postgres เก่าที่กำลังทำงานอยู่

4
ขอบคุณคริสเตียนนี่เป็นวิธีแก้ปัญหาที่ยอดเยี่ยมและง่ายฉันได้ไปจาก 9.3 เป็น 9.5 เช่นนี้
fnicollet

3
ทำงานได้อย่างสวยงามสำหรับการอัปเกรดจาก 9.1 เป็น 9.5 บนเซิร์ฟเวอร์ Windows 2012
Rolf

4
ปัญหาของการแก้ไขนี้คือหากคุณเปลี่ยนไฟล์กำหนดค่า Postgres บางไฟล์ (เช่นpostgresql.confหรือpg_hba.conf) คุณจะต้องทำซ้ำการเปลี่ยนแปลงเหล่านั้นด้วยตนเองในการติดตั้งใหม่ แต่ถ้าคุณใช้pg_upgradeclusterไฟล์กำหนดค่าจะถูกคัดลอกไปยังคลัสเตอร์ใหม่: manpages.ubuntu.com/manpages/precise/man8/ …
Alphaaa

1
โปรดทราบว่าหลังจากที่คุณเริ่มคำสั่งแล้วคุณจะได้รับพรอมต์รหัสผ่านหนึ่งชุด แต่คุณต้องป้อนรหัสผ่าน 2 รหัสต่อการยืนยันแต่ละครั้งโดยป้อน หรือคุณจะได้รับpg_dumpall: could not connect to database "XXX": fe_sendauth: no password supplied
Lu55

2
ในทางเทคนิคแล้วสิ่งนี้จะไม่สามารถใช้ได้กับเวอร์ชั่นใด ๆ ก็ตามเพียงแค่สำหรับเวอร์ชั่นต้นทางที่หรือสูงกว่า 7.0 ตามสถานะที่กำหนดเอง:Current releases of the dump programs can read data from any server version back to 7.0.
Mark Tielemans

56

นี่คือทางออกสำหรับผู้ใช้Ubuntu

ก่อนอื่นเราต้องหยุด postgresql

sudo /etc/init.d/postgresql stop

สร้างไฟล์ใหม่ชื่อ /etc/apt/sources.list.d/pgdg.list และเพิ่มบรรทัดด้านล่าง

deb http://apt.postgresql.org/pub/repos/apt/ utopic-pgdg main

ทำตามคำสั่งด้านล่าง

wget -q -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add -
sudo apt-get update
sudo apt-get install postgresql-9.4
sudo pg_dropcluster --stop 9.4 main 
sudo /etc/init.d/postgresql start

ตอนนี้เรามีทุกสิ่งเพียงแค่อัปเกรดดังต่อไปนี้

sudo pg_upgradecluster 9.3 main
sudo pg_dropcluster 9.3 main

แค่นั้นแหละ. คลัสเตอร์ที่ได้รับการอัพเกรดส่วนใหญ่จะทำงานบนหมายเลขพอร์ต 5433 ตรวจสอบด้วยคำสั่งด้านล่าง

sudo pg_lsclusters

2
ประโยคที่สองถึงประโยคสุดท้ายที่คุณพูดว่า "คลัสเตอร์ที่ได้รับการอัพเกรดส่วนใหญ่จะทำงานบนหมายเลขพอร์ต 5433" น่าจะบอกว่า "คลัสเตอร์ 9.3 จะทำงานบนหมายเลขพอร์ต 5433 เพื่อให้คุณสามารถเปลี่ยนกลับได้หากจำเป็น"
Andrew Thaddeus Martin

3
หมายเหตุ: สำหรับ Ubuntu 14.04 ให้ใช้ "trusty-pgdb" แทน utopic-pgdb
Johnny

3
โปรดทราบว่านี่ไม่ทำการอัปเกรดแบบแทนที่ ดังนั้นจึงไม่มีประโยชน์อย่างสมบูรณ์สำหรับฐานข้อมูล 700 GB ของฉันในปริมาณ 1TB
ชื่อปลอม

16

อัปเดต : กระบวนการนี้เหมือนกันสำหรับการอัปเกรด 9.5 ถึงอย่างน้อย 11.5; เพียงแค่ปรับเปลี่ยนคำสั่งเพื่อให้สะท้อนถึงรุ่น9.6และ10ที่9.6เป็นเก่ารุ่นและ10เป็นใหม่รุ่น อย่าลืมปรับไดเรกทอรี "เก่า" และ "ใหม่" ด้วย


ฉันเพิ่งอัพเกรด PostgreSQL 9.5 เป็น 9.6 บน Ubuntu และคิดว่าฉันจะแชร์สิ่งที่ค้นพบเนื่องจากมีความแตกต่างของ OS / แพคเกจเฉพาะที่ควรทราบ

( ฉันไม่ต้องการที่จะถ่ายโอนและกู้คืนข้อมูลด้วยตนเองดังนั้นคำตอบอื่น ๆ ที่นี่จึงไม่สามารถใช้งานได้)

กล่าวโดยสรุปกระบวนการประกอบด้วยการติดตั้ง PostgreSQL เวอร์ชันใหม่ควบคู่กับเวอร์ชั่นเก่า (เช่น 9.5 และ 9.6) จากนั้นเรียกใช้pg_upgradeไบนารีซึ่งอธิบายรายละเอียด (บางส่วน) ที่https://www.postgresql.org/ เอกสาร

สิ่งที่ "ยุ่งยาก" เท่านั้นpg_upgradeคือความล้มเหลวในการส่งค่าที่ถูกต้องสำหรับอาร์กิวเมนต์หรือความล้มเหลวในการเข้าสู่ระบบในฐานะผู้ใช้ที่ถูกต้องหรือcdไปยังตำแหน่งที่ถูกต้องก่อนดำเนินการคำสั่งอาจทำให้เกิดข้อความแสดงข้อผิดพลาด

บน Ubuntu (และอาจเป็น Debian) หากคุณใช้ repo "เป็นทางการ" 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)

อินพุตเหล่านี้อาจถูกระบุด้วย "long names" เพื่อให้ง่ายต่อการมองเห็น:

  -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"?

สิ่งนี้เกิดขึ้นเนื่องจากมีการใช้ตัวเลือกการกำหนดค่าเริ่มต้นหากไม่มีสวิตช์นี้ซึ่งส่งผลให้มีการใช้ตัวเลือกการเชื่อมต่อที่ไม่ถูกต้องดังนั้นข้อผิดพลาดของซ็อกเก็ต

ดำเนินการpg_upgradeคำสั่งจากเวอร์ชัน PostgreSQL ใหม่ :

/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

1
สำหรับผมใน Mac โยเซมิตี, PostgreSQL 9.2 -> 9.5: sudo su postgresเปลี่ยนวิธีการทั้งหมดใน pg_hba.conf ทั้งการติดตั้งเพื่อความไว้วางใจก่อน pg_upgrade วิ่ง pg_upgrade ใน / tmp / ส่วนตัวไม่ได้ ~ ไม่ได้ทำงานเพื่อให้sudo mkdir /foobarมีchmod 777 /foobarและวิ่งไปที่นั่น ในที่สุดคำสั่ง pg_upgrade:/Library/PostgreSQL/9.5/bin/pg_upgrade -b /Library/PostgreSQL/9.2/bin -B /Library/PostgreSQL/9.5/bin -d /Library/PostgreSQL/9.2/data -D /Library/PostgreSQL/9.5/data -o -cconfig_file=/Library/PostgreSQL/9.2/data/postgresql.conf -O -cconfig_file=/Library/PostgreSQL/9.5/data/postgresql.conf
Jarno Argillander

1
ฉันสามารถอัพเกรดได้สำเร็จจาก 9.5 เป็น 11.5 ต้องเพิ่มที่เก็บ postgres apt Ubuntu เป็น Ubuntu จากนั้นเพียงทำตามขั้นตอนเหล่านี้: tecadmin.net/install-postgresql-server-on-ubuntu
shakee93

14

หากคุณใช้บริการ homebrew และ homebrew คุณก็สามารถทำได้:

brew services stop postgresql
brew upgrade postgresql
brew postgresql-upgrade-database
brew services start postgresql

ฉันคิดว่านี่อาจไม่ทำงานอย่างสมบูรณ์หากคุณใช้คุณสมบัติ postgres ขั้นสูง แต่ใช้งานได้ดีสำหรับฉัน


1
ทำงานอย่างสมบูรณ์แบบสำหรับ macOS Mojave 10.14.2 - ขอบคุณ!
8bithero

13

คู่มือการใช้ครอบคลุมหัวข้อนี้ในเชิงลึก คุณสามารถ:

  • pg_upgradeในสถานที่; หรือ

  • pg_dumppg_restoreและ

หากมีข้อสงสัยให้ทำด้วยการทิ้ง อย่าลบไดเรกทอรีข้อมูลเก่าเพียงเก็บไว้ในกรณีที่มีสิ่งผิดปกติ / คุณทำผิดพลาด ด้วยวิธีนี้คุณสามารถย้อนกลับไปสู่การติดตั้ง 9.3 ที่ไม่เปลี่ยนแปลง

ดูรายละเอียดได้จากคู่มือ

หากคุณติดขัดให้โพสต์คำถามโดยละเอียดเพื่ออธิบายว่าคุณติดอยู่ที่ไหนและทำอะไรก่อน ขึ้นอยู่กับว่าคุณติดตั้ง PostgreSQL ด้วยเช่นกันเนื่องจากมี "การกระจาย" ที่แตกต่างกันของ PostgreSQL สำหรับ OS X (น่าเสียดาย) ดังนั้นคุณจะต้องให้ข้อมูลนั้น


8

ยืนอยู่บนไหล่ของสิ่งมีชีวิตที่น่าสงสารอื่น ๆ ที่เหยียบย่ำผ่านโคลนตมนี้ฉันสามารถทำตามขั้นตอนเหล่านี้เพื่อกลับขึ้นและทำงานหลังจากอัพเกรดเป็นโยเซมิตี:

สมมติว่าคุณใช้ home-brew เพื่อติดตั้งและอัปเกรด Postgres คุณสามารถทำตามขั้นตอนต่อไปนี้

  1. หยุดเซิร์ฟเวอร์ Postgres ปัจจุบัน:

    launchctl unload ~/Library/LaunchAgents/homebrew.mxcl.postgresql.plist

  2. เริ่มต้นฐานข้อมูล 9.4 ใหม่:

    initdb /usr/local/var/postgres9.4 -E utf8

  3. ติดตั้ง postgres 9.3 (เนื่องจากไม่มีอยู่ในเครื่องของฉันอีกต่อไป):

    brew install homebrew/versions/postgresql93

  4. เพิ่มไดเรกทอรีที่ถูกลบระหว่างการอัพเกรดโยเซมิตี:

    mkdir -p /usr/local/var/postgres/{pg_tblspc,pg_twophase,pg_stat_tmp}/touch /usr/local/var/postgres/{pg_tblspc,pg_twophase,pg_stat_tmp}/.keep

  5. วิ่งpg_upgrade:

    pg_upgrade -v -d /usr/local/var/postgres -D /usr/local/var/postgres9.4 -b /usr/local/Cellar/postgresql93/9.3.5/bin/ -B /usr/local/Cellar/postgresql/9.4.0/bin/

  6. ย้ายข้อมูลใหม่เข้าที่:

    cd /usr/local/var
    mv postgres postgres9.3
    mv postgres9.4 postgres
  7. เริ่ม Postgres ใหม่:

    launchctl load ~/Library/LaunchAgents/homebrew.mxcl.postgresql.plist

  8. ตรวจสอบ/usr/local/var/postgres/server.logรายละเอียดและตรวจสอบว่าเซิร์ฟเวอร์ใหม่เริ่มต้นอย่างถูกต้อง

  9. ในที่สุดติดตั้งไลบรารีที่เกี่ยวข้องอีกครั้ง

    pip install --upgrade psycopg2
    gem uninstall pg
    gem install pg

1
pg_upgrade -v -d / usr / local / var / postgres -D /usr/local/var/postgres9.4 -b /usr/local/Cellar/postgresql93/9.3.*/bin/ -B / usr / local / Cellar /postgresql/9.4.*/bin/ # รุ่นรองอาจแตกต่างกัน
Aaron McMillin

1
ขอบคุณสำหรับสิ่งนี้. ฉันวิ่งไปโดยไม่ตั้งใจbrew cleanupก่อนที่จะย้ายข้อมูลและนั่นทำให้ postgres9.3 ถูกถอนการติดตั้ง สิ่งนี้ช่วยได้ :)
markquezada

5

ดูเหมือนว่าโซลูชันได้รับการอบเข้าสู่ Homebrew แล้ว:

$ brew info postgresql
...
==> Caveats
To migrate existing data from a previous major version of PostgreSQL run:
  brew postgresql-upgrade-database
....

1

มันทำเพื่อฉัน

https://gist.github.com/dideler/60c9ce184198666e5ab4

สั้นและตรงประเด็น ฉันไม่ได้ตั้งใจที่จะเข้าใจความกล้าของ PostgreSQL โดยสุจริตฉันต้องการทำสิ่งต่าง ๆ ให้สำเร็จ


1
สิ่งนี้ใช้เครื่องมือ pg_upgradecluster ของ Ubuntu ซึ่งช้ากว่าเครื่องมือ pg_upgrade ของ PostgreSQL มากและแน่นอนมีเฉพาะใน Ubuntu เท่านั้น
alfonx

@alfonx ไม่เป็นความจริง ฉันมีมันใน jessieDebian มี 10+ DBs และจำนวน ~ 400MB ของข้อมูลฐานข้อมูลที่ถูกแปลงในพริบตา จากนั้นอีกครั้งฉันใช้ Debian เสมือนบน SSD
dimitarvp

ให้ฉันแก้ไขด้วยตัวเอง: pg_upgradecluster เป็นส่วนหนึ่งของ "โครงสร้างพื้นฐาน Debian PostgreSQL" ดังนั้นจึงมีเฉพาะใน Distros ที่ใช้ Debian เท่านั้น เกี่ยวกับความเร็ว pg_upgrade เสนอตัวเลือก "--link" ซึ่งการเชื่อมโยงไม่คัดลอกข้อมูลหากทำได้: postgresql.org/docs/9.4/static/pgupgrade.html
alfonx

1
บางทีเรามีเป้าหมายเพื่อผลลัพธ์ที่แตกต่าง หลังจากการอัพเกรดซอฟต์แวร์แบบ distro-wide ฉันลงเอยด้วย PostgreSQL รุ่นที่ 2 และข้อมูลที่โครงการของฉันใช้ติดอยู่กับรุ่นเก่า (9.3) ดังนั้นฉันจึงตามล่าลิงก์ด้านบน (ในคำตอบของฉัน) และอัปเกรดกำจัดกลุ่ม "เก่า" และรุ่น PG ที่เก่ากว่าออก
dimitarvp

ฉันพยายามอัพเกรดจาก 9.4 เป็น 11 ด้วยpg_upgradecluster 9.4 mainแต่ฉันได้รับข้อผิดพลาด Error: specified cluster does not exist... ฉันเดาว่าฉันต้องติดตั้ง postgresql-9.4 อีกครั้งก่อนด้วยคำแนะนำนี้: wiki.postgresql.org/wiki/Apt#Quickstart
rubo77

1

บนWindows ที่pg_upgradeผมเก็บไว้หันหน้าไปทางข้อความข้อผิดพลาดที่แตกต่างกันเมื่อพยายามที่จะใช้

บันทึกเวลาให้ฉันได้มากเพียง:

  1. สำรองฐานข้อมูล
  2. ถอนการติดตั้งสำเนาของ PostgreSQL ทั้งหมด
  3. ติดตั้ง 9.5
  4. กู้คืนฐานข้อมูล

ทำอย่างนี้กับ 9.5 ถึง 9.6 และทำงานได้อย่างสมบูรณ์เช่นกัน ดีที่จะสามารถอัพเกรดได้อย่างง่ายดายเช่นกันแทนที่จะเป็น "รุ่นล่าสุด" ฉันใช้ Big SQL เพื่อรับโปรแกรมติดตั้งที่ถูกต้อง ( openscg.com/bigsql/postgresql/installers.jsp )
Coder

0

ทางออกของฉันคือการรวมกันของสองทรัพยากรนี้:

https://gist.github.com/tamoyal/2ea1fcdf99c819b4e07d

และ

http://www.gab.lc/articles/migration_postgresql_9-3_to_9-4

สองหนึ่งช่วยมากขึ้นแล้วหนึ่งครั้งแรก อย่าทำตามขั้นตอนอย่างที่ไม่จำเป็น นอกจากนี้หากคุณไม่สามารถสำรองข้อมูลผ่านคอนโซล postgres คุณสามารถใช้วิธีอื่นและสำรองข้อมูลด้วย pgAdmin 3 หรือโปรแกรมอื่น ๆ เช่นที่ฉันทำในกรณีของฉัน

นอกจากนี้ลิงก์: https://help.ubuntu.com/stable/serverguide/postgresql.html ช่วยในการตั้งรหัสผ่านที่เข้ารหัสและตั้งค่า md5 สำหรับตรวจสอบสิทธิ์ผู้ใช้ postgres

หลังจากเสร็จสิ้นการตรวจสอบserverรุ่นpostgres ที่รันใน terminal:

sudo -u postgres psql postgres

หลังจากป้อนรหัสผ่านที่รันในเทอร์มินัล postgres:

SHOW SERVER_VERSION;

มันจะออกผลลัพธ์ที่ชอบ:

 server_version 
----------------
 9.4.5

สำหรับการตั้งค่าและการเริ่มต้น postgres ฉันได้ใช้คำสั่ง:

> sudo bash # root
> su postgres # postgres

> /etc/init.d/postgresql start
> /etc/init.d/postgresql stop

จากนั้นสำหรับการกู้คืนฐานข้อมูลจากไฟล์:

> psql -f /home/ubuntu_username/Backup_93.sql postgres

หรือถ้าไม่ลองกับอันนี้:

> pg_restore --verbose --clean --no-acl --no-owner -h localhost -U postgres -d name_of_database ~/your_file.dump

และถ้าคุณกำลังใช้ Rails ให้ทำbundle exec rake db:migrateหลังจากดึงรหัสแล้ว :)


0

สำหรับ Mac ผ่าน homebrew:

brew tap petere/postgresql,

brew install <formula>(เช่น: brew install petere/postgresql/postgresql-9.6)

ลบ Postgres เก่า:

brew unlink postgresql

brew link -f postgresql-9.6

หากมีข้อผิดพลาดเกิดขึ้นอย่าลืมอ่านและปฏิบัติตามขั้นตอนการชงในแต่ละขั้นตอน

ลองดูสิ่งนี้เพิ่มเติมได้ที่: https://github.com/petere/homebrew-postgresql


0

บน Windows 10 ตั้งแต่ฉันมี npm ฉันได้ติดตั้งแพ็คเกจ rimraf npm install rimraf -g

สำรองฐานข้อมูลทั้งหมดของคุณทีละคำโดยใช้คำสั่ง pg_dump -U $username --format=c --file=$mydatabase.sqlc $dbname

ติดตั้ง PostgreSQL เวอร์ชั่นล่าสุดแล้วเช่น 11.2 ซึ่งทำให้ฉันใช้พอร์ต 5433 ในเวลานี้

ตามมาด้วยการถอนการติดตั้งของรุ่นเก่าของเหมือง PostgreSQL เป็น 10. C:\PostgreSQL\10\dataหมายเหตุถอนการติดตั้งอาจจะให้คำเตือนไม่ลบโฟลเดอร์ นั่นเป็นเหตุผลที่เรามีขั้นตอนต่อไปโดยใช้ rimraf เพื่อลบโฟลเดอร์อย่างถาวรและเป็นโฟลเดอร์ย่อย

เปลี่ยนเป็น PostgreSQL rimraf 10ไดเรกทอรีการติดตั้งและวิ่งคำสั่ง 10 คือชื่อไดเรกทอรี หมายเหตุใช้ PostgreSQL รุ่นเก่ากว่าของคุณเช่น 9.5 หรืออะไรบางอย่าง

ตอนนี้เพิ่มC:\PostgreSQL\pg11\bin, C:\PostgreSQL\pg11\libลงในตัวแปรสภาพแวดล้อมของ Windows หมายเหตุรุ่นที่ติดตั้งใหม่ของฉันคือ 11 pg11จึงเป็นเหตุผลที่ผมใช้

นำทางไปC:\PostgreSQL\data\pg11แล้วเปิดpostgresql.confแก้ไขport = 5433ไปport = 5432

แค่นั้นแหละ. เปิด cmd และประเภทpsql -U postgres

ตอนนี้คุณสามารถคืนค่าฐานข้อมูลที่สำรองไว้ทั้งหมดของคุณทีละฐานโดยใช้คำสั่ง pg_restore -U $username --dbname=$databasename $filename


0

โซลูชันของฉันสำหรับการอัพเกรดจาก Postgresql 11 เป็น Postgresql 12 บน Windows 10 มีดังต่อไปนี้

เป็นข้อสังเกตแรกคุณจะต้องสามารถหยุดและเริ่มบริการ Postgresql คุณสามารถทำได้โดยใช้คำสั่งต่อไปนี้ใน Powershell

ราคาเริ่มต้น: pg_ctl start -D “d:\postgresql\11\data”

หยุด: pg_ctl stop -D “d:\postgresql\11\data”

สถานะ: pg_ctl status -D “d:\postgresql\11\data”

คุณควรสำรองข้อมูลก่อนทำการอัปเกรด อินสแตนซ์ Postgresql 11 ต้องทำงานอยู่ จากนั้นก็ให้ทำการลอกแบบกลม ๆ

pg_dumpall -U postgres -g -f d:\bakup\postgresql\11\globals.sql

จากนั้นสำหรับแต่ละฐานข้อมูล

pg_dump -U postgres -Fc <database> > d:\backup\postgresql\11\<database>.fc

หรือ

pg_dump -U postgres -Fc -d <database> -f d:\backup\postgresql\11\<database>.fc

หากยังไม่ได้ติดตั้ง Postgresql 12 (เนื่องจาก Postgresql 11 ยังติดตั้งอยู่จะมีพอร์ต 5433)

จากนั้นให้ทำการอัพเกรดดังนี้:

1) หยุดบริการ Postgresql 11 (ดูด้านบน)

2) แก้ไขpostgresql.confไฟล์ในd:\postgresql\12\dataและเปลี่ยนport = 5433เป็นport = 5432

3) แก้ไขพา ธ สภาพแวดล้อมของผู้ใช้ windows ( windows startจากนั้นพิมพ์env ) เพื่อชี้ไปที่ Postgresql 12 แทนที่จะเป็น Postresql 11

4) เรียกใช้การอัพเกรดโดยป้อนคำสั่งต่อไปนี้

pg_upgrade `
-b c:\program files\postgresql\11\bin `
-B c:\program files\postgresql\12\bin `
-d d:\postgresql\11\data `
-D d:\postgresql\12\data --username=postgres

(ใน PowerShell ใช้ backtick (หรือ backquote) `เพื่อดำเนินการต่อคำสั่งในบรรทัดถัดไป)

5) และในที่สุดก็เริ่มบริการ Postgresql 12 ใหม่

pg_ctl start -D “d:\postgresql\12\data”


-1

ฉันคิดว่านี่เป็นลิงก์ที่ดีที่สุดสำหรับโซลูชันของคุณเพื่ออัปเดต postgres เป็น 9.6

https://sandymadaan.wordpress.com/2017/02/21/upgrade-postgresql9-3-9-6-in-ubuntu-retaining-the-databases/
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.